我有一个java应用程序,它向服务器发送请求并返回响应。请求在每个单独的线程上运行。
我想要做的是一次维护5个线程(因此,一次5个请求)。此外,如果一个线程完成,我想启动一个新线程,以便始终运行5个线程。
最初我以为我可以在调用线程时使用join,但意识到这会阻塞我的主线程。
有没有办法完成这项工作?我没有用Java编程,并且对任何建议/建议持开放态度。
答案 0 :(得分:7)
我会使用ExecutorService
Executor exec = Executors.newFixedThreadPool(5);
for(String url: urls)
exec.submit(new UrlTask(urls));
// when finished
exec.shutdown();
这将同时执行最多5个任务。
答案 1 :(得分:3)
您似乎正在寻找具有固定线程池的ExecutorService之类的东西。
ExecutorService pool = Executors.newFixedThreadPool(5);
答案 2 :(得分:1)
您不应该尝试使用Thread
从头开始编写此代码。
我建议设置一个Executor
池并使用BlockingDeque
执行producer/consumer。