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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡帅冰 中级黑马   /  2013-5-7 16:52  /  1767 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡帅冰 于 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  。。运行了七八十来次也是这样的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
去掉同步就可以了。有同步始终就一个线程跑。
回复 使用道具 举报
心弦上的景致 发表于 2013-5-7 17:05
去掉同步就可以了。有同步始终就一个线程跑。

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

这个代码中是不是四个线程跑的是run方法中的语句??ticket是不是他们共同操作的一个变量数据。要保持ticket的唯一。怎么会是四个线程随机跑的???
回复 使用道具 举报
胡帅冰 发表于 2013-5-8 22:10
这个代码中是不是四个线程跑的是run方法中的语句??ticket是不是他们共同操作的一个变量数据。要保持tic ...

问题是一个线程进来后,它会加上锁,然后陷入死循环,不出来了,锁释放不了,其它线程也就进不来了。
回复 使用道具 举报
王洪波 发表于 2013-5-8 22:52
问题是一个线程进来后,它会加上锁,然后陷入死循环,不出来了,锁释放不了,其它线程也就进不来了。 ...

嗯。你说的对。 脑子锈掉了。嘿嘿……
回复 使用道具 举报
胡帅冰 发表于 2013-5-9 13:05
嗯。你说的对。 脑子锈掉了。嘿嘿……

你打算上哪期的课?
回复 使用道具 举报
王洪波 发表于 2013-5-9 14:48
你打算上哪期的课?

第21期的。你那??我还有多的没准备好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马