线程或单独的对象实例?

时间:2011-03-23 16:34:16

标签: java multithreading thread-safety

关于使用线程的经验法则是:如果同一对象的多个实例需要同时运行,请使用线程。但是我在类似于下面描述的场景中面临设计选择问题。请帮助我一劳永逸地澄清一下:


  

(重复我之前的例子   post)
我有5个Pen对象实例,   100个作者线程和3个Paper对象   实例。
任意数量的作者可以   使用任意数量的钢笔写   在任何给定的纸上。我创造了   阻塞队列以保护笔   作者访问的对象   如果使用队列中的所有笔,   作者等。
笔实例   来自Author线程的数据并附加它   到(指定)纸质实例。
  更新Paper实例后,Pen   还会更新调用作者   线程。

问题:

  • 运行笔是否有价值 object as threads?
  • 如果是这样,我将如何传递数据 作者线程到笔线这样 Pen线程可以执行读取 (来自作者),(对纸),和 回写(回到调用作者 线程)安全吗?

1 个答案:

答案 0 :(得分:2)

我的第一个想法是作者是 worker (即可能是线程),而笔和纸是资源(即没有线程 - 只有使用< / em>一些工人)。

我会重构设计,将功能从钢笔移动到作者。此外,我会尝试将作者建模为Callable s(或Runnable s,如果不需要返回任何结果)而不是线程,并在Executor框架内运行它们 - 这给出了更高级别的抽象,使代码更清晰,更安全。