簡體   English   中英

在 Java 多線程消費者-生產者場景中,如何了解您的應用程序是否已完成計算

[英]How to understand if your application has finished computing in a multithreading consumer-producer scenario in Java

我正在嘗試使用 Java 進行多線程處理,這是我以前從未做過的事情。 我目前正在嘗試設計的寵物應用程序有一個阻塞隊列和幾個工作人員。 該應用程序遵循以下規則:

  • 一個工人等待隊列中的消息
  • 當工作人員從隊列中獲取消息時,它會對其進行處理,並可能產生更多的消息添加回隊列。
  • 某些消息不會生成更多消息。
  • 應用程序以隊列中的幾條消息啟動。
  • 1 個工人 = 1 個線程

如果出現以下情況,應用程序應該退出:

  • 隊列中沒有更多消息
  • 所有工人都被阻塞並等待消息被消費

基本上,一旦所有消息都被消耗掉並且系統中不再產生/存在更多消息,我就會退出。 保證應用程序最終達到這一點。

現在我的問題是,我不確定什么是最佳實踐/設計來理解上述條件是真實的,避免賽車條件。 有什么幫助嗎?

我目前處於設計階段,所以我沒有代碼可以向您展示,抱歉(我知道我此時的問題很籠統,所以請隨時問我任何問題)。 歡迎任何建議!

提前致謝!

一種方法是讓每個工作人員在 AtomicInteger 開始時加 1(表示它正在工作),然后在結束時減 1。 減去 1 后,如果 AtomicInteger 為 0,這意味着沒有“活躍”的工人。

所以當一個worker結束時,它會從atomicInteger中減去1,然后檢查如果隊列大小為零(沒有等待消息)和原子整數為零(沒有活躍的worker),就可以退出應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM