使用最新的JAVA并发例程,我找不到这种特定情况的示例。
我计划使用threads来处理一个开放队列中的项目,该队列可能包含0到数千个请求。我想限制,在任何给定的时间,有不少于0和不超过10个线程处理队列项目。
有没有专门针对这种特殊情况的Java并发进程?
发布于 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个线程:
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
我希望这能帮助你解决你的问题。
发布于 2013-02-02 03:03:07
我也有同样的任务:我使用了java.util.concurrent包的BlockingQueue。我创建了X个工作线程,它从队列中读取一个操作,处理它,并在准备好时执行下一个操作。这很简单,而且运行得很好。
如果你使用X= 10个工作线程,那么你的任务就解决了。
发布于 2013-02-02 03:07:06
看起来你需要一个具有corePoolSize=0和maximumPoolSize=10的线程池执行器。
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
https://stackoverflow.com/questions/14653173
复制相似问题