并发机制中的java任务设计

并发机制中的java任务设计,java,multithreading,concurrency,Java,Multithreading,Concurrency,我正在设计一个基于任务的多线程Java1.5系统 任务通常会与集合交互以确定失败或成功的匹配事件。根据结果,另一个任务可能排队等待IO事务,以通知客户端和/或存储有关该事务的重要信息 Java为线程池和任务管理提供了一组丰富的并发工具,但我正在尝试为任务本身提供最佳设计 对于exmample:每个任务是否都应该引用集合?任务应该如何初始化?等等 是否有人知道好的编码示例或任何说明不同设计可能性的参考资料。任何试图用Java进行多线程处理的人都应该阅读Brian Goetz的 您不应该尝试使用任何

我正在设计一个基于任务的多线程Java1.5系统

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

Java为线程池和任务管理提供了一组丰富的并发工具,但我正在尝试为任务本身提供最佳设计

对于exmample:每个任务是否都应该引用集合?任务应该如何初始化?等等


是否有人知道好的编码示例或任何说明不同设计可能性的参考资料。

任何试图用Java进行多线程处理的人都应该阅读Brian Goetz的


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

一个可行的策略是每个任务引用一个共享的线程安全的集合。这是可行的,但在如何使用集合(最重要的是是否修改它)以及预期的并发性方面存在一些明显的限制。如果需要从任务中修改集合,则会在共享集合上引发某种程度的写入争用。这可能是一个瓶颈,具体取决于线程数、哪个集合(线程安全还是并发)等。即使读取也可能导致某些集合类型中的争用

另一种选择是为每个任务提供它需要的输入,让它计算结果,然后对结果进行后处理。这可以并行完成,也可以不并行完成,这取决于您的需要


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

这个问题对我来说有点模糊。也许可以试着对你想要做的事情进行更清晰的描述?他说他已经在使用Java 1.5了,我认为“丰富的线程池和任务管理并发工具集”可能指的是Java.util.concurrent。但是这本书绝对是一个正确的观点,我同意JCIP是最好的Java并发性书籍。但在JDK 5之前,我编写了很多成功的并发代码此外,还有一个用于java.util.concurrent的后端口库。两者都是正确的。但是JDK1.4已经到了生命的尽头,所以除非你有一个不能升级的遗留应用程序,否则我建议至少从JDK1.5开始。JDK 6是现在的通用发布版本。为什么要谈论1.4?