簡體   English   中英

當我在多個線程上等待時,如何在特定線程上調用通知?

[英]How can I call notify on a specific thread when I have put wait on many threads?

我有一個代碼,從一開始就為每個對象創建一個線程。 然后,將線程和相關對象存儲在哈希圖中。 當調用特定方法時,我需要使用調用該方法的對象從哈希圖中獲取線程,並執行一些邏輯。 下面是我的方法。

public void sendMessage(Message message) {
    for (Iterator<MessageListenerItem> iterator = messageListnerItemList.iterator(); iterator.hasNext();) {
        MessageListenerItem messageListnerItem = (MessageListenerItem) iterator.next();
        Thread messageListenerThread = threadMessageListenerMap.get(messageListnerItem.getMl());
        System.out.println("The thread that is executing is : " + messageListenerThread.getName());
        this.messageListenerItem = messageListnerItem;
        this.message = message;
        messageListenerThread.start();
    }
}

因此,如果從對象“ A”接收到方法,則將啟動線程“ A”。 但是在線程“ A”執行結束之前,如果對象“ A”再次調用此方法,那么我將不得不等待直到線程“ A”結束,然后將其再次用於第二次調用。 但是與此同時,如果對象“ B”調用此方法,它將從哈希圖中獲取其線程“ B”並使用它。 因此,如果我使用wait-notify,如何在執行完成后僅通知線程B,而不通知線程A。如何實現此目的? 請指教。

等待/通知對於您想要實現的機制而言過於粗糙。

您將必須設置一些標志或其他內容,以便ThreadB需要知道未將通知發送給它。 並使用notifyAll

可以為每個線程使用不同的監視器嗎?

暫無
暫無

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

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