当我在许多线程上等待时,如何在特定线程上调用notify?

时间:2015-12-23 10:47:47

标签: java multithreading thread-safety notify

我有一个代码,我在开始时为每个对象创建一个线程。然后我将线程和相关对象存储在hashmap中。当调用特定方法时,我需要使用调用该方法的对象从hashmap获取线程并执行一些逻辑。以下是我的方法。

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”结束然后再次使用它进行第二次调用。但同时如果Object“B”调用此方法,它将从hashmap获取其Thread“B”并使用它。因此,如果我使用wait-notify,如何在执行完成后只通知线程B,而不是线程A.如何实现这一点?请指教。

2 个答案:

答案 0 :(得分:0)

等待/通知对于您想要实现的目标来说太粗糙了。

您必须设置一些标志或某些内容,以便ThreadB需要知道通知未发送给它。并使用notifyAll

答案 1 :(得分:0)

您可以为每个线程使用不同的监视器吗?

相关问题