黑马程序员技术交流社区

标题: 多线程的安全 [打印本页]

作者: cz萑    时间: 2014-8-5 17:38
标题: 多线程的安全
请教大家,加上了synchronized之后,为啥原本的4个线程都执行,现在就只有一个线程在执行,无论把ticket改成多少都是?
  1. class Ticket implements Runnable
  2. {
  3.         private int ticket = 100;
  4.         Object obj = new Object();
  5.         public void run()
  6.         {
  7.                 while(true)
  8.                 {
  9.                         synchronized(obj)
  10.                         {
  11.                                 if(ticket>0)
  12.                                 {
  13.                                         try
  14.                                         {
  15.                                                 Thread.sleep(10);
  16.                                         }
  17.                                                 catch (Exception e){}
  18.                                
  19.                                         System.out.println(Thread.currentThread().getName()+"......"+ticket--);
  20.                                 }               
  21.                         }
  22.                 }
  23.         }
  24. }
  25. class  ThreadTest2
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 Ticket t = new Ticket();

  30.                 Thread t1 = new Thread(t);
  31.                 Thread t2 = new Thread(t);
  32.                 Thread t3 = new Thread(t);
  33.                 Thread t4 = new Thread(t);
  34.                 t1.start();
  35.                 t2.start();
  36.                 t3.start();
  37.                 t4.start();
  38.         }
  39. }
复制代码

作者: fxwb2005    时间: 2014-8-5 17:51
你把票改成500张再试试……我估计只是运气问题……
作者: cz萑    时间: 2014-8-5 18:25
不行啊,我都改过1000张,一直都不行
作者: cz萑    时间: 2014-8-5 18:26
fxwb2005 发表于 2014-8-5 17:51
你把票改成500张再试试……我估计只是运气问题……

我改到1000张都是一个结果
作者: fxwb2005    时间: 2014-8-5 18:31
cz萑 发表于 2014-8-5 18:26
我改到1000张都是一个结果

你的代码我复制过去都可以多线程
作者: star5603    时间: 2014-8-5 18:33
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

这还认电脑的???
作者: cz萑    时间: 2014-8-5 18:40
本帖最后由 cz萑 于 2014-8-5 18:42 编辑
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

file:///C:/Users/Administrator/Desktop/R5N0D64)0%5DV3@%252%25I3DH1NW.jpg那真邪门了,我怎么改数字都不行
作者: cz萑    时间: 2014-8-5 18:41
star5603 发表于 2014-8-5 18:33
这还认电脑的???

真奇怪哎
作者: cz萑    时间: 2014-8-5 19:16
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

我在那个代码的基础上试了同步函数以及静态同步函数,都能成功,唯独这个不行,不明白原因。。。
作者: dreamseekerkun    时间: 2014-8-5 23:10
没问题,正常运行,我试了,100效果不明显,1000很明显
作者: rolling-stone    时间: 2014-8-6 08:09
你可以把sleep的时间改改,改的时间再长一点,比如20,50等等
作者: 晓风    时间: 2014-8-6 10:31
代码是没有问题的,效果不明显的话一个是改票数,一个是改休眠时间,时间改长点。




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