繁体   English   中英

线程或单独的对象实例?

[英]Thread or Separate Object instances?

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


(重用我上一篇文章中的例子)
我有5个Pen对象实例,100个Author线程和3个Paper对象实例。
任何数量的作者可能会使用任意数量的笔在任何给定的论文上书写。
我创建了阻塞队列来保护作者访问的Pen对象。
如果使用队列中的所有笔,则作者等待。
Pen实例从Author线程获取数据并将其附加到(指定的)Paper实例。
更新Paper实例后,Pen还会更新调用Author线程。

问题:

  • 将Pen对象作为线程运行是否有价值?
  • 如果是这样,我如何将数据从Author线程传递到Pen线程,以便Pen线程可以安全地执行读取 (从作者), 写入 (到Paper)和回写 (回到调用Author线程)?

我的第一个采取将是作者是工人 (即可能是线程),而笔和纸的资源 (即没有线程- 仅用于一些工人)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM