如何创建永远不会在有限池中运行的多个线程

时间:2011-10-04 21:07:45

标签: java multithreading

我一直试图找出如何在一种执行器服务中运行一些线程,这些线程不会离开run()方法,而有人通过套接字通道连接到它们。

执行程序服务可以解决我的问题,如果它在整个池上旋转而不是等待方法运行停止。

示例:我有200个线程,我想在20个线程的有限池中运行它。

任何提示?

1 个答案:

答案 0 :(得分:4)

任何合规的,池ExecutorService实现已经这样做了。在可调用/可运行的run()方法完成运行之前,它不会重用线程。当一个线程可用时,该线程将用于启动下一个排队的任务。

List<Runnable> myTasks = new ArrayList<Runnable>();
//...add 200 runnables to myTasks...

ExecutorService threadPoolService = Executors.newFixedThreadPool(20);
for ( Runnable task : myTasks ) {
    threadPoolService.submit(task);
}

修改

如果@BalusC对您的问题的解释是正确的,那么您似乎正在寻找类似coroutines的内容。在Java中没有对此的支持。我认为你应该研究的是non-blocking I/O;但是你应该知道,大多数真实世界的服务器都可以处理200个并发线程没有问题(因为大多数线程在任何给定时间都会被阻塞)。