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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mrwalker 中级黑马   /  2017-3-19 17:51  /  1254 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[Java] 纯文本查看 复制代码
public class Demo01 {

	public static void main(String[] args) {
		new Tickets().start();
		new Tickets().start();
		new Tickets().start();
		new Tickets().start();
	}

}

class Tickets extends Thread {
	private static int tickets = 100;
	public void run() {
synchronized(Tickets.class) { 
		while(true) {
				if(tickets <= 0) {
					break;
				}else {
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(getName() + "---第" + tickets-- + "张票");
				}
			}
		}
	}
}


把synchronized(Tickets.class)放在while(true)前面的话,会默认只调用第一个进程,这是为什么?

3 个回复

倒序浏览
都在循环外了,感觉没有用到
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
你把代码快都上锁了相当于整个方法上锁,相当于整个run只允许一个进程执行,相当于单线程,相当于。。。。。。。。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
lvshen9 发表于 2017-3-19 20:11
都在循环外了,感觉没有用到

肯定用到了,没用到的话是另一种结果
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马