点击关注公众号,Java干货及时送达
问题1 为什么是while 而不是if
大多数人都知道常见的使用synchronized代码:
synchronized (obj) {
while (...那么我们假设下面的场景就会导致死锁:
P - 生产者 调用put
C - 消费者 调用get
P1 放了一个数字1
P2 想来放,发现满了,在wait里面等了
P3 想来放,发现满了,在wait里面等了...C1想来拿, C2, C3 就在get里面等着
C1开始执行, 获取1, 然后调用notify 然后退出
如果C1把C2唤醒了, 所以P2 (其他的都得等.)只能在put方法上等着....这时候, 没有别的调用了, 那么现在这三个线程(P3, C2,C3)就全部变成suspend了.也就是死锁了....23 种设计模式实战(很全)
Spring Boot 保护敏感配置的 4 种方法!
再见单身狗!Java 创建对象的 6 种方式
阿里为什么推荐使用 LongAdder?