有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Producer Consumer主线程在其他线程运行时退出

我的代码片段:

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()


共 (4) 个答案

  1. # 1 楼答案

    你可以试试CountDownLatch。它将完全满足您的需求,您需要做的是,创建一个count value等于线程数的CountDownLatch实例。启动所有线程并在主线程中调用await方法。在所有线程中都有CountDownLatch对象引用,并在完成自己的作业后在每个线程中调用countDown方法。对于每种倒计时方法,CountDownLatch计数值都将递减。一旦到达zero,调用wait的方法将被唤醒Note if any one of your thread fails to call countDown then await will never get wake-up

    试试这个作为你的参考, http://www.java-redefined.com/p/java-count.html

  2. # 3 楼答案

    您可以使用countdownlatch并等待所有线程完成执行,也可以使用consumerService。等待终止()和producerService。等待终止()