【发布时间】:2016-05-31 16:41:26
【问题描述】:
我有一个必须在多个线程之间共享的对象列表。
例如,我有 5 个离散对象和一个包含 20 个线程的池。最初,20 个线程中的 5 个将开始工作,其他线程处于 WAIT 状态。 5 个线程将同时使用 5 个对象中的每一个。
如果任何线程完成,它应该释放对象,以便第 6 个线程可以开始工作。
对于线程的并行处理,我想我可以使用 Executor 池。但是如何在线程之间共享对象列表呢?
【问题讨论】:
-
取一个 BlockingQueue (docs.oracle.com/javase/7/docs/api/java/util/concurrent/…) 并在完成后放回对象
-
第 6 个线程对对象所做的事情与第 5 个线程不同吗?如果只有 5 个对象,为什么需要 5 个以上的线程。拥有 4 倍所需线程数量当然没有性能优势。
-
是的。即使它们具有相同的源代码,所有 20 个线程也将具有不同的操作。操作将根据提供给源代码的输入而有所不同。正如 Gilfoy 和 Svetlin Zarev 所建议的,我正在使用一种现在可以完美运行的实现。不过感谢您的 cmets。
标签: java multithreading parallel-processing