黑马程序员技术交流社区

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

作者: 胡帅冰    时间: 2013-5-7 16:52
标题: 线程问题
本帖最后由 胡帅冰 于 2013-5-7 21:46 编辑
  1. class TicketDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Ticket t=new Ticket();
  6.                 Thread t1=new Thread(t);
  7.                 Thread t2=new Thread(t);
  8.                 Thread t3=new Thread(t);
  9.                 Thread t4=new Thread(t);
  10.                 t1.start();
  11.                 t2.start();
  12.                 t3.start();
  13.                 t4.start();
  14.         }
  15. }
  16. class Ticket implements Runnable
  17. {
  18.         private int ticket=100;
  19.    public  synchronized void run()
  20.         {
  21.            while(true)
  22.                 {
  23.                    if(ticket>0)
  24.                         {
  25.                            System.out.println(Thread.currentThread().getName()+"sale------"+ticket--);
  26.                    }
  27.                    else
  28.                         {
  29.                       System.exit(0);
  30.                    }
  31.                         
  32.            }
  33.    }
  34. }
复制代码
请大家看看这个程序是有什么问题嘛??为什么只有一个线程运行??打印出的结果只有  Thread-0sale------100  到  Thread-0sale------1  。。运行了七八十来次也是这样的。
作者: 心弦上的景致    时间: 2013-5-7 17:05
去掉同步就可以了。有同步始终就一个线程跑。
作者: 胡帅冰    时间: 2013-5-7 17:10
心弦上的景致 发表于 2013-5-7 17:05
去掉同步就可以了。有同步始终就一个线程跑。

是的。你说的很对,去掉同步就行了,但是去掉同步,这个……这个……不就没意思了嘛??我在做关于线程安全的练习。就是需要用这个synchronized来加锁的。。。
作者: 胡帅冰    时间: 2013-5-7 21:47
这个我知道了,还是没有抢到执行权的问题了。
作者: 心弦上的景致    时间: 2013-5-8 20:13
这个代码我看来就不涉及到线程安全问题 线程死锁就是两个线程持有相同资源 你这个代码 什么资源是四个线程共同持有 都是随机跑的 不涉及到线程安全
作者: 胡帅冰    时间: 2013-5-8 22:10
心弦上的景致 发表于 2013-5-8 20:13
这个代码我看来就不涉及到线程安全问题 线程死锁就是两个线程持有相同资源 你这个代码 什么资源是四个线程 ...

这个代码中是不是四个线程跑的是run方法中的语句??ticket是不是他们共同操作的一个变量数据。要保持ticket的唯一。怎么会是四个线程随机跑的???
作者: 王洪波    时间: 2013-5-8 22:52
胡帅冰 发表于 2013-5-8 22:10
这个代码中是不是四个线程跑的是run方法中的语句??ticket是不是他们共同操作的一个变量数据。要保持tic ...

问题是一个线程进来后,它会加上锁,然后陷入死循环,不出来了,锁释放不了,其它线程也就进不来了。
作者: 胡帅冰    时间: 2013-5-9 13:05
王洪波 发表于 2013-5-8 22:52
问题是一个线程进来后,它会加上锁,然后陷入死循环,不出来了,锁释放不了,其它线程也就进不来了。 ...

嗯。你说的对。 脑子锈掉了。嘿嘿……
作者: 王洪波    时间: 2013-5-9 14:48
胡帅冰 发表于 2013-5-9 13:05
嗯。你说的对。 脑子锈掉了。嘿嘿……

你打算上哪期的课?
作者: 胡帅冰    时间: 2013-5-9 15:05
王洪波 发表于 2013-5-9 14:48
你打算上哪期的课?

第21期的。你那??我还有多的没准备好。




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