【发布时间】:2012-09-10 00:52:00
【问题描述】:
我有一个任务可以从线程池设计模式中受益(许多小任务要并行执行)。我最初从头开始实现了一个简单的线程池,n 个 Runnables 都从同一个ConcurrentLinkedQueue 拉出工作单元,直到队列为空,然后终止。然后我决定“嘿,让我们试试 Java 中的 Executor,因为它可能比我天真的设计的系统经过更好的测试和更可靠。”问题:在我的实现中,每个线程一直持续到队列为空,使用一段时间(!queue.isEmpty()),并获得了自己的非线程安全对象实例,我们称之为SlowObject foo,构造起来很耗时。试图通过所有进入Executor 池的Runnables 时间效率低的对象的实例失败,因为它不是线程安全的。为每个Runnable 创建一个SlowObject 的新实例是不可取的,因为它们的构建成本很高。
有没有办法说“我们正在使用多少个线程?让我们为每个线程创建一个SlowObject,然后让 Runnables 检测我们正在使用的线程并查找要使用的正确对象?”这听起来很脆弱且容易失败——不过,我不确定我应该看什么设计模式。
【问题讨论】:
-
您确定不能快速复制
SlowObject吗?查找需要放入其中的数据是不是很慢,还是在拥有所有数据后构造对象很慢? -
@coding.mof,写下你的意见作为答案。恕我直言,这是正确的答案。
标签: java thread-safety threadpool executor