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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

cz萑

中级黑马

  • 黑马币:22

  • 帖子:119

  • 精华:0

© cz萑 中级黑马   /  2014-8-5 17:38  /  925 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请教大家,加上了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. }
复制代码

11 个回复

倒序浏览
你把票改成500张再试试……我估计只是运气问题……
回复 使用道具 举报
不行啊,我都改过1000张,一直都不行
回复 使用道具 举报
fxwb2005 发表于 2014-8-5 17:51
你把票改成500张再试试……我估计只是运气问题……

我改到1000张都是一个结果
回复 使用道具 举报
cz萑 发表于 2014-8-5 18:26
我改到1000张都是一个结果

你的代码我复制过去都可以多线程
回复 使用道具 举报
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

这还认电脑的???
回复 使用道具 举报
本帖最后由 cz萑 于 2014-8-5 18:42 编辑
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

file:///C:/Users/Administrator/Desktop/R5N0D64)0%5DV3@%252%25I3DH1NW.jpg那真邪门了,我怎么改数字都不行
回复 使用道具 举报
star5603 发表于 2014-8-5 18:33
这还认电脑的???

真奇怪哎
回复 使用道具 举报
fxwb2005 发表于 2014-8-5 18:31
你的代码我复制过去都可以多线程

我在那个代码的基础上试了同步函数以及静态同步函数,都能成功,唯独这个不行,不明白原因。。。
回复 使用道具 举报
没问题,正常运行,我试了,100效果不明显,1000很明显
回复 使用道具 举报
你可以把sleep的时间改改,改的时间再长一点,比如20,50等等
回复 使用道具 举报
代码是没有问题的,效果不明显的话一个是改票数,一个是改休眠时间,时间改长点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马