日期:2014-05-20  浏览次数:20659 次

问一个关于多线程之间读写结束通知的问题
用一个线程A往ArrayBlockingQueue里写对象,其他N个线程从ArrayBlockingQueue里读取对象并处理。

当线程A写完所有对象到ArrayBlockingQueue后。如何通知其他N个线程所有的对象都已经写完了呢?

目前用的方法是N个线程读取时用ArrayBlockingQueue的poll(long timeout, TimeUnit unit) ,将timeout设大一些,如果超时,说明所有的对象都读取完了。

请问一下,还有没有其他通知N个线程所有对象写完了的方式?谢谢。


------解决方案--------------------
没搞懂你的需求为什么要用到多线程

用观察者模式不可以吗?
------解决方案--------------------
1、调用每个消费线程的interrupt方法,等待的线程会中断

2、消费线程有多少个,在结束的时候就往ArrayBlockingQueue里放入多少个“标识对象(Poison pills)”,消费线程看到这个对象就知道里面没有东西,就不再去获取

3、如果消费线程位于一个单独的线程池且应用的代码中没有处理中断(或者应用中的中断对业务处理无关紧要),调用线程池的shutdownNow