java - 在 Java 线程中等待和通知给定的时间间隔

标签 java multithreading thread-safety wait notify

我正在开发一个用例,如下所示。我是多线程新手,在使用它时遇到了这个问题。

  1. 我在网络上广播了一个 Activity 。
  2. 它被所有听众接收,他们向我单播了他们的信息。
  3. 这是在回调方法中接收的,如下所示,我将得到 N 个未知数量的回调线程。取决于特定时间的听众。
  4. 我必须收集所有订阅者的列表。

我必须等待至少 10 秒才能让所有订阅者回复我。

        //Sender

            public void sendMulticastEvent() {
                api.sendEvent();
                /* after sending event wait for 15 sec so call back can collect all the subscribers */
                //start waiting now
            }


    //Callback method
            public void receiveEventsCallback(final Event event) {
                //i will receive multiple response threads here..  
                //event object will have the topic and subscribers details, which i will collect here
               list.add(event)

               notify()
               //notify thread here so i have a cumulative list of all received events.
            }

我只关心如何..?

  1. 在 sendMulticast 事件处开始等待 X 秒
  2. 将所有收到的事件添加到列表后,在 receiveEventsCallback() 处发出通知。

我已经从理论上阅读了等待和通知、倒计时闩锁和屏障。但我不确定哪个会好,因为我在多线程方面的经验很差。

最佳答案

  1. Start a wait at the sendMulticast event for X seconds

只需使用带有超时参数的 wait() 版本。

请注意,您应该在每次成功调用 wait() 后(即返回事件)手动更新超时值。

  1. Notify at receiveEventsCallback() after all the recieved events has been added to the list.

您的问题坚持认为您不知道您的网络中有多少听众。您怎么知道所有事件都已收到(并回复)?

发件人的唯一方法是等待 X 秒并处理在那一刻之前可用的所有回复。

关于java - 在 Java 线程中等待和通知给定的时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30711260/

相关文章:

c++ - 跨线程使用事件句柄 - C++

java - 线程阻塞问题?

spring - Spring Bean 的原型(prototype)是做什么用的?

java - java.lang.Math.max(int a, int b) 线程安全吗?

java - Cassandra 异常

java - 从并行评估切换到顺序评估的干净方法是什么?

java - 为什么更改代码中的一行会导致堆栈溢出?

java - 如何排除除@ComponentScan 下的一个类之外的所有@Component 类?

multithreading - 我是否必须为线程需要创建对象的副本

windows-phone-7 - 在给定延迟后执行方法的简单方法?