首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制线程数和Java并发性

限制线程数和Java并发性
EN

Stack Overflow用户
提问于 2013-02-02 02:56:31
回答 4查看 1.3K关注 0票数 3

使用最新的JAVA并发例程,我找不到这种特定情况的示例。

我计划使用threads来处理一个开放队列中的项目,该队列可能包含0到数千个请求。我想限制,在任何给定的时间,有不少于0和不超过10个线程处理队列项目。

有没有专门针对这种特殊情况的Java并发进程?

EN

回答 4

Stack Overflow用户

发布于 2013-02-02 03:08:20

我想线程池就是你要找的。看看ExecutorService和Executors。

ExecutorService:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html

执行器:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html

获得一个新的线程修复的线程池,最大处理。一次10个线程:

代码语言:javascript
复制
ExecutorService threadPool = Executors.newFixedThreadPool(10);

使用submit方法,您可以将可调用对象或可运行对象传递给池。

对于您的用例,您需要一个查看队列的进程,如果有新的请求,则必须创建一个Callable或Runnable,并将其传递到线程池。该池可确保最大。一次执行10个线程。

这是一个非常小的教程:http://www.math.uni-hamburg.de/doc/java/tutorial/essential/threads/group.html

使用线程池的一件好事是,提交方法返回一个Future对象,该对象支持已执行线程的返回类型。

未来:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html

我希望这能帮助你解决你的问题。

票数 9
EN

Stack Overflow用户

发布于 2013-02-02 03:03:07

我也有同样的任务:我使用了java.util.concurrent包的BlockingQueue。我创建了X个工作线程,它从队列中读取一个操作,处理它,并在准备好时执行下一个操作。这很简单,而且运行得很好。

如果你使用X= 10个工作线程,那么你的任务就解决了。

票数 2
EN

Stack Overflow用户

发布于 2013-02-02 03:07:06

看起来你需要一个具有corePoolSize=0和maximumPoolSize=10的线程池执行器。

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14653173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档