黑马程序员技术交流社区

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

作者: 淡然    时间: 2012-6-12 21:48
标题: 多线程问题
  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
求解析?

作者: 黄克帅    时间: 2012-6-12 22:16
你多实验几次,最好是把数字设大点。或者再把线程的权限设置成不同去试试
作者: 淡然    时间: 2012-6-12 22:22
只要把数字设小点就正常了,但是数字越大我说的现象越明显
作者: 舒赫莱宁    时间: 2012-6-12 22:24
你的电脑没什么问题么,我怎么感觉是四个线程同时卖的
运行结果正确的啊
还有我不明白你锁了个object有什么意义
作者: 马东华    时间: 2012-6-12 22:54
多运行几次吧,我的运行也是成功的




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