多线程 - Java消费者远多于生产者时候,产生数组越界问题?
阿神
阿神 2017-04-18 10:13:32
0
1
299
阿神
阿神

闭关修行中......

全部回复(1)
迷茫

应该是这里的问题:

   if (mRes.size() <= 0) { //空仓的事后 则获取锁并且等待
        try {
            System.out.println("空仓");
            mEmptyCondition.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    

如果这里有多个线程阻塞在mEmptyCondition.await();,当mEmptyCondition执行signalAll的时候,会唤醒所有正在阻塞的线程,第一个线程获得锁执行没问题,第二个在生成之前获得锁就会报出结果里的异常了。

可以把if改成while,或list的实现采用blocking实现。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!