扫码关注官方订阅号
闭关修行中......
应该是这里的问题:
if (mRes.size() <= 0) { //空仓的事后 则获取锁并且等待 try { System.out.println("空仓"); mEmptyCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } }
如果这里有多个线程阻塞在mEmptyCondition.await();,当mEmptyCondition执行signalAll的时候,会唤醒所有正在阻塞的线程,第一个线程获得锁执行没问题,第二个在生成之前获得锁就会报出结果里的异常了。
mEmptyCondition.await();
mEmptyCondition
signalAll
可以把if改成while,或list的实现采用blocking实现。
if
while
list
blocking
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
应该是这里的问题:
如果这里有多个线程阻塞在
mEmptyCondition.await();,当mEmptyCondition执行signalAll的时候,会唤醒所有正在阻塞的线程,第一个线程获得锁执行没问题,第二个在生成之前获得锁就会报出结果里的异常了。可以把
if改成while,或list的实现采用blocking实现。