[英]Java dynamic list in while(true) loop
我有一個包含對象的列表,我需要在刪除或添加項目時永久性地遍歷該列表。 所有這些都應該在可運行線程中發生。 我想要的是,迭代過程永遠不會停止,而仍然能夠向其中添加新對象,並刪除完成的對象。
這在Java中可行嗎?
您正在描述生產者/消費者模式。 Java具有實現此目的的線程安全方法。 最簡單的方法是使用java.util.concurrent.BlockingQueue<E>
使用它的方法是在使用者(線程)和一個或多個生產者線程之間共享BlockingQueue。 消費者使用方法E Queue.take()
。 客戶端使用Queue.offer(E)
方法添加到Queue中。
首先創建BlockingQueue:
BlockingQueue<MyObject> myQueue = new LinkedBlockingQueue<MyObject>(int capacity);
服務器線程將如下所示:
BlockingQueue<MyObject> myQueue;
// A constructor which receives the BlockingQueue object
// Main Loop
boolean isInterrupted = false;
while(!isInterrupted) {
try {
MyObject object = myQueue.take(); // Will block
// Process object
} catch (InterruptedException e) {
isInterrupted = true;
}
}
對於每個生產者線程,將BlockingQueue對象傳遞給每個對象,並使用:
BlockingQueue<MyObject> myQueue;
// A constructor which receives the BlockingQueue object
// Create MyObjects
myQueue.offer(myObject); // Will add to the queue
有一個隊列容量的概念。 如果生產者添加得太快,隊列可能會達到容量。 在這種情況下,要約可能會失敗。 有關完整詳細信息,請參見javadoc LinkedBlockingQueue 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.