【问题标题】:Maintain 5 threads at a time in Java在Java中一次维护5个线程
【发布时间】:2013-02-04 15:49:14
【问题描述】:

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

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

最初我以为我可以在调用线程时使用 join,但意识到这会阻塞我的主线程。

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

【问题讨论】:

标签: java multithreading


【解决方案1】:

我会使用 ExecutorService

Executor exec = Executors.newFixedThreadPool(5);

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

// when finished
exec.shutdown();

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

【讨论】:

    【解决方案2】:

    您似乎正在寻找像ExecutorService 这样的固定线程池。

    ExecutorService  pool = Executors.newFixedThreadPool(5);
    

    【讨论】:

      【解决方案3】:

      您不应该尝试使用 Thread 从头开始​​编写。

      我建议设置一个Executor 池并使用BlockingDeque 执行producer/consumer

      【讨论】:

      • 为什么像 Executors 实用程序那样使用 BlockingDeque 而不是 ConcurrentLinkedQueue?鉴于 ExecutorService 有一个内置队列,我会使用它。
      • @PeterLawrey - ConcurrentLinkedQueue 阻塞?如果没有,如果没有任务,线程要做什么?
      • @MartinJames 不,我的错,是LinkedBlockingQueue 做到了。但它不是双端队列。
      • 没有任务时线程怎么办?当然,等他们来了。消费者将从队列中取出它们并将它们分发给执行者。
      猜你喜欢
      • 2019-10-30
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多