我的工作在Java中需要很长时间。所以我想把这个工作分成线程并运行它们。线程完成工作后,返回我的服务和服务给他们新的工作。 ThreadGroup适合这个或任何其他推荐?
答案 0 :(得分:3)
答案 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)
有一个教程,你应该在这里找到你需要知道的一切:
http://java.sun.com/docs/books/tutorial/essential/concurrency/
答案 4 :(得分:0)
ThreadGroup
通常对应用程序代码没有多大用处。它对容器代码也没有太多用处。 Java PlugIn使用ThreadGroup
来区分线程所属的applet。
java.util.concurrent
,特别是ExecutorService
,提供了处理线程和并发的便利实用程序。
对于计算密集型的细粒度任务,JDK7中的fork-join框架将非常有用。
在开始使用这个困难的代码之前,您可能需要考虑它是否值得。你能做其他不需要大规模线程使用的优化吗?是您尝试处理的I / O延迟吗?如果它是CPU密集型的,那么使用比硬件更多的线程没有太多意义。