Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使多个线程在有限的池中永不停止运行_Java_Multithreading - Fatal编程技术网

Java 如何使多个线程在有限的池中永不停止运行

Java 如何使多个线程在有限的池中永不停止运行,java,multithreading,Java,Multithreading,我一直在试图找出如何在一种执行器服务中运行几个线程,当有人通过套接字通道连接到它们时,这些线程不会离开run()方法 如果executor服务在整个池中循环,而不是等待方法运行停止,那么它可以解决我的问题 示例:我有200个线程,我想在20个线程的有限池中运行所有线程 任何提示?任何合规的池式执行服务都已经做到了这一点。在callable/runnable的run()方法完成运行之前,它不会重用线程。当一个线程可用时,该线程将用于启动下一个排队任务 List<Runnable> my

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

如果executor服务在整个池中循环,而不是等待方法运行停止,那么它可以解决我的问题

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


任何提示?

任何合规的池式执行服务都已经做到了这一点。在callable/runnable的
run()
方法完成运行之前,它不会重用线程。当一个线程可用时,该线程将用于启动下一个排队任务

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

ExecutorService threadPoolService = Executors.newFixedThreadPool(20);
for ( Runnable task : myTasks ) {
    threadPoolService.submit(task);
}
List myTasks=new ArrayList();
//…将200个可运行项添加到myTasks。。。
ExecutorService threadPoolService=Executors.newFixedThreadPool(20);
for(可运行任务:myTasks){
threadPoolService.submit(任务);
}
编辑
如果@BalusC对您的问题的解释是正确的,那么您似乎在寻找类似的答案。Java中不支持这一点。我认为你应该调查的是;但是,您应该知道,大多数真实世界的服务器可以同时处理200个线程,没有问题(因为它们中的大多数在任何给定时间都会被阻塞)。

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

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

ExecutorService threadPoolService = Executors.newFixedThreadPool(20);
for ( Runnable task : myTasks ) {
    threadPoolService.submit(task);
}
List myTasks=new ArrayList();
//…将200个可运行项添加到myTasks。。。
ExecutorService threadPoolService=Executors.newFixedThreadPool(20);
for(可运行任务:myTasks){
threadPoolService.submit(任务);
}
编辑
如果@BalusC对您的问题的解释是正确的,那么您似乎在寻找类似的答案。Java中不支持这一点。我认为你应该调查的是;但是,您应该知道,大多数真实世界的服务器可以同时处理200个线程,这没有问题(因为它们中的大多数在任何给定时间都会阻塞)。

这个问题对于Chipper来说确实有点难,但我知道他希望“仅”使用20个线程同时运行200个任务。@Balus:那么协同路由呢?好吧,我并不是从我最初读过的问题中得到的。“不会离开
run()
method…”这句话真的让人困惑。另外,“我有200个线程”应该解释为“我有200个任务”。他根本没有200个线程,否则就很容易:)也许他想让NIO跨20个线程进行200个套接字连接(任务)。这个问题对Chipper来说有点难,但我知道他想“只”使用20个线程同时运行200个任务。@Balus:那么协同程序呢?好吧,我并不是从我最初读过的问题中得到的。“不会离开
run()
method…”这句话真的让人困惑。另外,“我有200个线程”应该解释为“我有200个任务”。他根本没有200个线程,否则很容易:)也许他想要NIO跨20个线程进行200个套接字连接(任务)。