繁体   English   中英

Java多线程:通知使用者线程所有生产者线程已完成的好方法?

[英]Java multithreading: a good way to notify the consumer threads that all the producer threads have finished?

我正在研究一个非常简单的生产者/消费者方案:我有一些线程将数据传递给监视器,还有其他线程在等待监视器中的数据,将其删除并将数据传递给另一个监视器。 在某个时候,生产者都愿意将他们的最新数据发送到监视器。 使用者使用完监视器中的最后一个数据后,需要告知他们不要等待监视器中的更多数据。 为了使它正常运行,消费者线程需要在最后一个生产者线程产生它的最后一点数据时得到通知,并且没有更多的数据到期。 我相信有多种方法可以做到这一点。 到目前为止,监视器对活动的生产者线程数进行计数,并且当生产者线程完成时,它会通知监视器。 我非常好奇,尽管这样做会更优雅。

一种简单的解决方案是让每个生产者发送poison pill ,让消费者保存到目前为止收到的有毒丸计数,并将其与生产者数量进行比较。

 class Consumer{
   final int numOfProducers;
   int poisonPillsReceived;

   void run(){
     while(true){
        Object obj = queue.poll();
        if(isPoisonPill(obj)){
          poisonPillsReceived++;
        }

        if(numOfProducers == poisonPillsReceived){
         break;
        }else{
          ....
        }
     }
   }
 }  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM