2009-01-16 32 views
1

我想出了一个基于任务的多线程java 1.5系统的设计。并发机制中的java设计任务

任务通常会与集合进行交互以确定失败或成功的匹配事件。根据结果​​,另一项任务可能会排队进行IO交易,以通知客户和/或存储有关交易的重要信息。

Java为线程池和任务管理提供了一套丰富的并发工具,但我试图为任务本身提出最佳设计。

例如:每个任务是否应该引用集合?应该如何初始化任务? etc ...

是否有人知道优秀的编码示例或任何参考,说明了一些不同的设计可能性。

+0

这个问题对我来说有点含糊。也许试图提高你正在尝试做什么的描述? – krosenvold 2009-01-16 19:17:36

回答

3

任何试图在Java中执行多线程的人都应阅读Brian Goetz的"Java Concurrency In Practice"

您不应该尝试使用低于版本5的任何JDK。这就是java.util.concurrent包首次出现时的情况。

+0

他说他已经在Java 1.5上了,我认为“线程池和任务管理的丰富并发工具集”可能指的是java.util.concurrent。但这本书绝对是一个有效的观点。 – 2009-01-16 22:15:15

0

一个可行的策略是为每个任务引用共享的线程安全的集合。这很有效,但是对于你如何使用集合(最重要的是你是否在修改它)和预期的并发性有一些明显的限制。如果您需要从任务中修改集合,则会在共享集合上产生某种级别的写入争用。取决于线程的数量,哪个集合(线程安全与并发)等,这可能是一个瓶颈。即使读取可能会导致某些集合类型的争用。

另一种选择是给每个任务所需的输入,让它计算结果,然后后处理结果。这可以并行或不并行完成,具体取决于您的需求。

在任何情况下,您都应该使用ExecutorService,因为它可以让您组合一个线程池和一个请求队列,其中线程将根据需要提取和执行任务。如果有用,CompletionService也可以添加结果队列。