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