黑马程序员技术交流社区

标题: 多线程问题求教 [打印本页]

作者: 四川男人    时间: 2014-4-17 23:19
标题: 多线程问题求教
本帖最后由 四川男人 于 2014-4-18 20:41 编辑

代码如下:
class ThreadDemo03
{
public static void main(String[] args)
{
  Ticket ticket = new Ticket();
  Thread t1 = new Thread(ticket);
  Thread t2 = new Thread(ticket);
  Thread t3 = new Thread(ticket);
  Thread t4 = new Thread(ticket);

//开启四个线程
  t1.start();
  t2.start();
  t3.start();
  t4.start();
}
}
class Ticket implements Runnable
{
private int tick = 100;
Object obg = new Object();
public void run()
{
  while (true)
  {
   synchronized(obg)     //加锁
   {
    if (tick>0)
    {
     try{Thread.sleep(10);}catch(Exception e){}
     System.out.println(Thread.currentThread().getName()+".........."+tick--);
    }
   }
  }
}
}


问题是:为什么我的代码运行起来一直是一个线程在跑?
Thread-0..........7240
Thread-0..........7239
Thread-0..........7238
Thread-0..........7237
Thread-0..........7236
Thread-0..........7235
Thread-0..........7234
Thread-0..........7233
Thread-0..........7232
Thread-0..........7231
Thread-0..........7230
Thread-0..........7229
Thread-0..........7228
Thread-0..........7227

..........我的cpu是双核四线程的


作者: 谭荣强    时间: 2014-4-17 23:27
thread.sleep(10)出问题。进来一个就躺下10ms,10毫秒程序就运行完了。sleep(0),就可以。电脑太快了
Thread-2..........30
Thread-2..........29
Thread-2..........28
Thread-2..........27
Thread-2..........26
Thread-2..........25
Thread-2..........24
Thread-3..........23
Thread-1..........22
Thread-1..........21
Thread-3..........20
Thread-3..........19
Thread-3..........18
Thread-3..........17
Thread-3..........16
Thread-3..........15
作者: Tking    时间: 2014-4-18 00:54
本帖最后由 Tking 于 2014-4-18 00:56 编辑

如果你真的想看到其他线程也跑起来,很好办,再执行完锁里的代码后,让线程再休息一段,或者用暂停语句,短暂的释放掉CUP权限,就可以看到每条线路都在跑了,
记得,需要记住的就是,在执行完同步里的代码后,出了同步的位置加一句暂停语句或者sleep语句也可以。

作者: 四川男人    时间: 2014-4-18 01:05
Tking 发表于 2014-4-18 00:54
如果你真的想看到其他线程也跑起来,很好办,再执行完锁里的代码后,让线程再休息一段,或者用暂停语句,短 ...

如你所说。我改了代码试了试,果然如此,感谢
作者: 四川男人    时间: 2014-4-18 01:06
谭荣强 发表于 2014-4-17 23:27
thread.sleep(10)出问题。进来一个就躺下10ms,10毫秒程序就运行完了。sleep(0),就可以。电脑太快了
Thread- ...

sleep(0)还是感觉太快了。如果我sleep(50)的话,然后把票定多一点儿,让它跑一会儿,还是有变化的,不过都间隔200多票,不过还是感谢你的回答,thank you




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2