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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 淡然 中级黑马   /  2012-6-12 21:48  /  1227 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package hcy.test.main;


  2. class ThreadDemo implements Runnable//extends Thread
  3. {
  4. private static int ticket=50;
  5. public static Object obj=new Object();
  6. public void run(){
  7. while(true){
  8. synchronized(obj){
  9. try {
  10. Thread.sleep(500);//睡眠0.5秒
  11. } catch (InterruptedException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15. if(0<ticket)
  16. System.out.println(Thread.currentThread().getName()+" run``` "+ticket--);

  17. }
  18. }
  19. }
  20. }


  21. public class Test {
  22. public static void main(String[] args){
  23. // TODO Auto-generated method stub
  24. ThreadDemo td=new ThreadDemo();

  25. Thread thread1=new Thread(td);
  26. Thread thread2=new Thread(td);
  27. Thread thread3=new Thread(td);
  28. Thread thread4=new Thread(td);

  29. thread1.start();//
  30. thread2.start();
  31. thread3.start();
  32. thread4.start();

  33. }
  34. }
复制代码
怎么随着sleep时间的增大,所有的ticket都被Thread-0卖掉了?我的锁明明是加在while循环的里面的。
输出结果如下:
Thread-0 run```  50
Thread-0 run```  49
Thread-0 run```  48
·
·中间全是Thread-0 run```XX
·
Thread-0 run```  3
Thread-0 run```  2
Thread-0 run```  1
求解析?

4 个回复

倒序浏览
你多实验几次,最好是把数字设大点。或者再把线程的权限设置成不同去试试
回复 使用道具 举报
只要把数字设小点就正常了,但是数字越大我说的现象越明显
回复 使用道具 举报
你的电脑没什么问题么,我怎么感觉是四个线程同时卖的
运行结果正确的啊
还有我不明白你锁了个object有什么意义
回复 使用道具 举报
多运行几次吧,我的运行也是成功的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马