java - 生产者消费者主线程退出,而其他线程正在运行

标签 java multithreading threadpool executorservice

我的代码片段:

public class ProducerConsumerTest {

  public static void main(String[] args)
  {
    ArrayBlockingQueue<String> sharedQueue = new ArrayBlockingQueue<String>(20, true);

    ExecutorService consumerService = Executors.newFixedThreadPool(5);
    ExecutorService producerService = Executors.newSingleThreadExecutor();

    Future future=producerService.submit(new Producer(sharedQueue));

    consumerService.execute(new Consumer(sharedQueue));
    consumerService.execute(new Consumer(sharedQueue));
    consumerService.execute(new Consumer(sharedQueue));
    consumerService.execute(new Consumer(sharedQueue));
    consumerService.execute(new Consumer(sharedQueue));
  }
}

如何让主线程等待其他线程?

我面临的问题是我不知道 ExecutorService 创建的线程的名称,这就是为什么我不能使用 join() 。例如:t1.join()main() .

最佳答案

为什么不尝试设置障碍呢?

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html

PS。我认为它们可以在 JAVA7 及更高版本上运行

关于java - 生产者消费者主线程退出,而其他线程正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27122300/

相关文章:

java - [++]*+ 在正则表达式中代表什么

激活 MouseListener 的 obj 的 Java getName

java - Apache Ignite 中单个分区上的 ScanQuery 是单线程还是多线程?

java - 为什么执行相同行为的线程需要不同的时间?

multithreading - .NET 4.0中ThreadPool是如何实现的?

java - SL4FJ 是否提供与 Log4J PatternLayout 等效的功能?

java - 干净地处理事件

c++ - 在 while 循环中将线程置于另一个线程中

java - 线程工作分配和多核的JVM实现

Java 线程执行受计数和时间限制