我有一个必须在多个线程之间共享的对象列表。
例如,我有一个5个离散对象和一个由20个线程组成的池。首先,20个线程中的5个将开始工作,其他线程处于等待状态。5个线程将同时使用5个对象中的每一个。
如果完成了任何一个线程,就应该释放对象,这样第6个线程就可以开始工作了。
对于线程的并行处理,我想我可以使用Executor池。但是如何在线程之间共享对象列表呢?
发布于 2016-05-31 07:38:31
我想你的线程模型弄错了。目前,您希望在并行环境中总是出错的share。您应该做的是创建一个pipeline。要做到这一点,您有几种选择。
producer线程,当它们完成对队列的put()对象,然后其中一个consumer线程take()对象并开始处理它。threadpool充当(1)中的队列。不是对共享队列执行put(),而是对共享线程池或专用线程池执行submit()/execute(),以将对象传递到管道的下一阶段。这种方法的缺点是,当前阶段必须知道提交任务的确切池,还必须知道如何创建要提交的runnable。PS:在我的回答中,我假设Thread-6执行的操作与前面的5个线程不同。如果这个假设是错误的--解决(1)仍然是正确的,是前进的方向。
发布于 2016-05-31 07:37:43
您可以定义要并行运行的线程数。例如,
ExecutorService executor = Executors.newFixedThreadPool(20);然后,您可以编写一个for循环来处理对象列表。
for(Object obj: objList) {
Runnable thread = new MyThreadImpl(obj);
executor.execute(thread);
}这应该可以很好的按照你的
https://stackoverflow.com/questions/37539340
复制相似问题