使用Java中的线程进行聚类

时间:2009-08-19 14:56:22

标签: java multithreading cluster-analysis threadgroup

我的工作在Java中需要很长时间。所以我想把这个工作分成线程并运行它们。线程完成工作后,返回我的服务和服务给他们新的工作。 ThreadGroup适合这个或任何其他推荐?

5 个答案:

答案 0 :(得分:3)

首先,你需要线程:

a)您有一台多处理器机器

或b)您有一个处理器,但您的作业是IO密集型(而不是CPU密集型)

否则,使用线程时你什么也得不到。

这里需要的是ThreadPool

答案 1 :(得分:1)

不确定您的项目当前处于什么样的开发状态,因为您的问题陈述非常有限,但您可能需要考虑查看JDK7中的fork-join项目:http://www.ibm.com/developerworks/java/library/j-jtp11137.html

要获得很多收益从中查看,并且由于它是全部开源的,您可以将代码作为补丁下载并开始使用它。

(可能不适用于你现在必须实施的任何 ,但如果你打算在未来的某个时间开发/维护你的应用程序,那么值得一看)

答案 2 :(得分:1)

查看 ExecutorCompletionService - 它就是这样做的。

示例:[从Java 6 API JavaDocs中提取]

 void solve(Executor e, Collection<Callable<Result>> solvers)
     throws InterruptedException, ExecutionException {
       CompletionService<Result> ecs
           = new ExecutorCompletionService<Result>(e);
       for (Callable<Result> s : solvers)
           ecs.submit(s);
       int n = solvers.size();
       for (int i = 0; i < n; ++i) {
           Result r = ecs.take().get();
           if (r != null)
               use(r);
       }
   }

答案 3 :(得分:0)

查看java.util.concurrent包。

有一个教程,你应该在这里找到你需要知道的一切:

http://java.sun.com/docs/books/tutorial/essential/concurrency/

特别关注High Level Concurrency Objects

答案 4 :(得分:0)

ThreadGroup通常对应用程序代码没有多大用处。它对容器代码也没有太多用处。 Java PlugIn使用ThreadGroup来区分线程所属的applet。

java.util.concurrent,特别是ExecutorService,提供了处理线程和并发的便利实用程序。

对于计算密集型的细粒度任务,JDK7中的fork-join框架将非常有用。

在开始使用这个困难的代码之前,您可能需要考虑它是否值得。你能做其他不需要大规模线程使用的优化吗?是您尝试处理的I / O延迟吗?如果它是CPU密集型的,那么使用比硬件更多的线程没有太多意义。