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中一次维护5个线程_Java_Multithreading - Fatal编程技术网

在Java中一次维护5个线程

在Java中一次维护5个线程,java,multithreading,Java,Multithreading,我有一个java应用程序,它向服务器发送请求并返回响应。每个请求在单独的线程上运行 我想做的是一次维护5个线程(因此,一次运行5个请求)。另外,如果一个线程完成,我想启动一个新线程,以便5个线程始终运行 起初我以为调用线程时可以使用join,但后来意识到这会阻塞我的主线程 有没有办法做到这一点?我没有太多的Java编程,我愿意接受任何建议。你不应该尝试使用线程从头开始编写 我建议您设置一个执行器池,并使用BlockingDeque执行,您不应该尝试使用线程从头开始编写 我建议您设置一个Execu

我有一个java应用程序,它向服务器发送请求并返回响应。每个请求在单独的线程上运行

我想做的是一次维护5个线程(因此,一次运行5个请求)。另外,如果一个线程完成,我想启动一个新线程,以便5个线程始终运行

起初我以为调用线程时可以使用join,但后来意识到这会阻塞我的主线程


有没有办法做到这一点?我没有太多的Java编程,我愿意接受任何建议。

你不应该尝试使用
线程
从头开始编写


我建议您设置一个
执行器
池,并使用
BlockingDeque
执行,您不应该尝试使用
线程
从头开始编写


我建议您设置一个
Executor
池,并使用
BlockingDeque

似乎您正在寻找类似于固定线程池的东西

ExecutorService  pool = Executors.newFixedThreadPool(5);

看起来您正在寻找类似于固定线程池的东西

ExecutorService  pool = Executors.newFixedThreadPool(5);

我会使用一个服务

Executor exec = Executors.newFixedThreadPool(5);

for(String url: urls) 
   exec.submit(new UrlTask(urls));

// when finished
exec.shutdown();

这将一次执行多达5项任务。

我将使用Executor服务

Executor exec = Executors.newFixedThreadPool(5);

for(String url: urls) 
   exec.submit(new UrlTask(urls));

// when finished
exec.shutdown();

这将一次执行最多5项任务。

您可以使用线程池()尝试在作业/任务中思考,而不是线程您可以使用线程池()尝试在作业/任务中思考,而不是像Executors实用程序那样使用BlockingDeque而不是ConcurrentLinkedQueue?假设ExecutorService有一个内置队列,我会使用它。@PeterLawrey-ConcurrentLinkedQueue块?如果没有,如果没有任务,线程会做什么?@MartinJames不,我错了,是
LinkedBlockingQueue
做的。但它不是一个Deque。如果没有任务,线程会做什么?当然要等到他们来。消费者会将它们从队列中取出并分发给执行者。为什么像执行者实用程序那样使用BlockingDeque而不是ConcurrentLinkedQueue?假设ExecutorService有一个内置队列,我会使用它。@PeterLawrey-ConcurrentLinkedQueue块?如果没有,如果没有任务,线程会做什么?@MartinJames不,我错了,是
LinkedBlockingQueue
做的。但它不是一个Deque。如果没有任务,线程会做什么?当然要等到他们来。消费者将把它们从队列中取出并分发给执行者。