繁体   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