84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
闭关修行中......
应该是这里的问题:
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
应该是这里的问题:
如果这里有多个线程阻塞在
mEmptyCondition.await();
,当mEmptyCondition
执行signalAll
的时候,会唤醒所有正在阻塞的线程,第一个线程获得锁执行没问题,第二个在生成之前获得锁就会报出结果里的异常了。可以把
if
改成while
,或list
的实现采用blocking
实现。