A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 四川男人 中级黑马   /  2014-4-17 23:19  /  710 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 四川男人 于 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是双核四线程的

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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:56 编辑

如果你真的想看到其他线程也跑起来,很好办,再执行完锁里的代码后,让线程再休息一段,或者用暂停语句,短暂的释放掉CUP权限,就可以看到每条线路都在跑了,
记得,需要记住的就是,在执行完同步里的代码后,出了同步的位置加一句暂停语句或者sleep语句也可以。
回复 使用道具 举报
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马