我有一件工作在Java中花费的时间太长。所以我想把这个工作分解成线程并运行它们。线程完成他们的工作后,返回到我的服务和服务给他们新的工作。 ThreadGroup适用于这个或任何其他推荐?使用Java中的线程进行群集
回答
时退房ExecutorCompletionService - 它确实如此。
例:
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);
}
}
你能给我一些样品吗? – firstthumb 2009-08-20 07:29:21
首先,你如果要么需要线程:
一)你有一个多处理器机器
或b)你有一个单一的处理器,但你的工作是IO密集型的(而不是CPU密集型)
否则,您在使用线程时将不会获得任何收益。
你所需要的就是ThreadPool
看看在java.util.concurrent包。
有一个教程,你应该找到你需要知道这里的一切:
http://java.sun.com/docs/books/tutorial/essential/concurrency/
ThreadGroup
通常对应用程序代码没有多大用处。这对容器代码也不是很有用。 Java PlugIn使用ThreadGroup
来区分线程所属的小程序。
java.util.concurrent
,尤其是ExecutorService
,提供了用于处理线程和并发的便利实用程序。
对于计算密集型细粒度任务,JDK7中的fork-join框架将很有用。
在开始这个困难的代码之前,您可能需要考虑它是否值得。你可以做其他不需要大规模线程使用的优化吗?你正试图处理的是I/O延迟?如果它是CPU密集型的,那么在硬件上使用更多的线程并没有多少意义。
在什么样的发展状态项目目前,由于您的问题声明是相当有限的,但你可能要考虑让有看的fork-join项目在JDK7未来不确定:http://www.ibm.com/developerworks/java/library/j-jtp11137.html
有很多东西都可以从中看出来,因为它都是开源的,所以你可以下载代码作为补丁,并且可以继续使用它。
(可能并不适用于任何你必须实现现在,但值得一看非更少,如果你打算开发/维护您在未来的一段时间内应用)
- 1. Vert.x集群事件总线跨进程
- 2. 使用R通过SOM进行群集
- 3. 使用Cytoscape.js进行节点群集
- 4. 使用Apache Solr和Carrot2进行群集
- 5. 使用Mosquitto Broker进行群集形成
- 6. 使用纱线集群
- 7. 群集上的多线程Java应用程序?
- 8. 使用Java 8进行线程排序
- 9. 使用Java中的线程进行套接字编程
- 10. 如何在多线程HPC群集中运行二进制可执行文件?
- 11. Linux/Java进程的集群管理器,日志采集
- 12. 负载平衡在群集中运行的Java应用程序
- 13. 使用Java对启用了Kerberos的Hadoop集群进行身份验证
- 14. 使用线程对java中的数组块进行排序
- 15. 在tomcat上用弹簧进行集群
- 16. 如何从pm2下的群集进程延迟“在线”事件?
- 17. 如何使用repmgr使用Postgresql群集进行故障恢复?
- 18. 如何在MATLAB中使用JAVA进行显式多线程?
- 19. R:spatstat:Thomas集群进程的残差分析
- 20. Node.js的集群子进程路径
- 21. 使用子群集群
- 22. 使用现有的Apche-Spark Standalone群集进行Mesos配置
- 23. 使用DBSCAN进行群集出奇的慢
- 24. 使用Pathos进行分布式集群的Python多处理
- 25. 线程并行于其他进程java
- 26. 在群集中启动和停止hadoop守护进程/进程
- 27. 如何使用java群集数字
- 28. 使用Java NIO进行流水线Http
- 29. Java API:使用不同线程上的代理进行连接
- 30. 使用Java的htmlunit.WebClient和多个代理进行多线程
通过[从Java 6 API的JavaDoc拉] “给他们的工作:” 我想你的意思是你将数据传递给他们呢? “给他们新工作”涉及什么? – user142350 2009-08-19 14:58:43
在这个经济体中,即使线程也很难找到工作。 。 。 – Gandalf 2009-08-20 17:27:55