点击关注公众号,Java干货及时送达
问题1 为什么是while 而不是if
大多数人都知道常见的使用synchronized代码:
synchronized (obj) {
while (...A 移除数据后 想通知别人, 此时list的大小有了变化, 于是调用了notifyAll (line5), 这个时候就把B给唤醒了, 那么B接着往下走....C1想来拿, C2, C3 就在get里面等着
C1开始执行, 获取1, 然后调用notify 然后退出
如果C1把C2唤醒了, 所以P2 (其他的都得等.)只能在put方法上等着....P2 这个时候唤醒了P3, P3发现队列是满的,没办法,只能等它变为空. 这时候, 没有别的调用了, 那么现在这三个线程(P3, C2,C3)就全部变成suspend了.也就是死锁了....Java 创建对象的 6 种方式
阿里为什么推荐使用 LongAdder?
AnotherRedisDesktopManager 开始收费了?
别再写爆爆爆炸类了,试试装饰器模式!