0

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

4

5 回答 5

3

首先,如果有以下任一情况,您需要线程:

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

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

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

你这里需要的是ThreadPool

于 2009-08-19T14:59:44.717 回答
1

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

从中可以学到很多东西,而且由于它都是开源的,您已经可以将代码作为补丁下载并尝试使用它。

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

于 2009-08-19T15:16:26.247 回答
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);
       }
   }
于 2009-08-19T16:29:43.957 回答
0

看看java.util.concurrent包。

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

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

特别关注高级并发对象

于 2009-08-19T14:59:58.177 回答
0

ThreadGroup通常对应用程序代码没有多大用处。容器代码也没有多大用处。Java PlugIn 用于ThreadGroup区分线程属于哪个applet。

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

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

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

于 2009-08-19T15:10:01.797 回答