用一个线程A往ArrayBlockingQueue里写对象,其他N个线程从ArrayBlockingQueue里读取对象并处理。当线程A写完所有对象到ArrayBlockingQueue后。如何通知其他N个线程所有的对象都已经写完了呢?目前用的方法是N个线程读取时用ArrayBlockingQueue的poll(long timeout, TimeUnit unit) ,将timeout设大一些,如果超时,说明所有的对象都读取完了。请问一下,还有没有其他通知N个线程所有对象写完了的方式?谢谢。

解决方案 »

  1.   

    1、调用每个消费线程的interrupt方法,等待的线程会中断2、消费线程有多少个,在结束的时候就往ArrayBlockingQueue里放入多少个“标识对象(Poison pills)”,消费线程看到这个对象就知道里面没有东西,就不再去获取3、如果消费线程位于一个单独的线程池且应用的代码中没有处理中断(或者应用中的中断对业务处理无关紧要),调用线程池的shutdownNow