我有工作需要很长的时间。所以我想要分割这个工作进入线并运行它们。后线完成他们的工作,回到我的服务和服务给他们新的就业机会。ThreadGroup适用于这种或任何其他建议?

有帮助吗?

解决方案

检查出的 ExecutorCompletionService - 它不正是这个

示例:从Java拉出6周API的JavaDoc]

 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);
       }
   }

其他提示

首先,你需要线程如果任一:

a)你有一个多处理器机器

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

否则,您将使用线程时一无所获。

您所需要的就是线程池

看看 java。工具.并发 包。

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

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

重点 高水平并发对象 尤其是这样。

ThreadGroup是多大用处的应用程序代码的一般不。这不是用集装箱代码的大量要么。 Java插件使用ThreadGroup区分线程所属的小应用程序。

java.util.concurrent,特别ExecutorService,提供除其他事项外方便的工具,用于处理的线程和并发性。

有关计算密集的细粒度的任务,在JDK7叉-join框架将是有用的。

开始在这个困难的代码之前,你可能要考虑是否值得。你能做到这一点并不需要大规模的线程使用其他的优化?难道你想处理I / O延迟?如果是CPU密集型的,没有一点的使用更多的线程比你在硬件很大。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top