coding
MrZive的gravatar头像
MrZive2019-01-11 20:18:16

龙8国际娱乐pt老虎机

class TT implements Runnable{
	@Override
	public void run() {
		Integer apple=new Integer(10);
		synchronized (apple) {//与while语句互换后就没事
			while(true){
				if(apple==0){
					try {
						apple.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				apple--;
				System.out.println(apple);
			}
		}
	}
}

线程运行后会报java.lang.IllegalMonitorStateException,一直想不明白为什么会报错,debug后,发现apple.wait后,线程没暂停,继续循环到synchronized再次获取锁才报的错,如果synchronized与while语句互换后就没问题,这又是为什么呢???

所有回答列表(8)
丶右转的gravatar头像
丶右转 LV91月14日

顶顶顶顶顶顶顶顶顶

hqblyq的gravatar头像
hqblyq LV21月14日

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

13836800381的gravatar头像
13836800381 LV41月15日

挺好

hr4370913的gravatar头像
hr4370913 LV51月16日

挺好的

张丨丨丨丨丨的gravatar头像

不知道

JustLikebongbongbong的gravatar头像
JustLikebongbongbong LV91月22日

当执行到apple--后,你的synchrod(apple)锁对象发生变化,导致你的锁消失,而wait()方法不在锁中就会报java.lang.IllegalMonitorStateException

我要很多的牛币的gravatar头像
我要很多的牛币 LV41月24日

0

宾克斯的美酒的gravatar头像
宾克斯的美酒 LV102月12日

欢乐锁,悲观锁

顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友