明明设置了线程同步但是为什么只有李四一个线程一直在那运行啊啊?

[复制链接]
查看11 | 回复2 | 2012-5-2 03:27:17 | 显示全部楼层 |阅读模式
synchronized的范围太大了,一般来说不能大于while(true),一个线程只有在执行完被synchronized所包含的代码后,其他线程才有机会运行,当synchronized中出现while(true)这样的无限循环,就意味着第一个进入synchronized块的线程永远不会交出cpu执行权,因为它永远出不了synchronized块。把范围缩小就OK了class A implements Runnable {public int tickets = 100;public void run() {while (true) {synchronized (this) {if (tickets > ...
回复

使用道具 举报

千问 | 2012-5-2 03:27:17 | 显示全部楼层
你把public synchronized void run() 中的synchronized 去掉就可以了。你将run()设置为synchronized,张三和王二情何以堪!下面是我改的一个,其中,觉得还要新建类太麻烦,就将AA做成A的内部类了。public class A{public static void main(String[...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行