当前位置: 首页 > 面试题库 >

通知方法如何工作

申屠宗清
2023-03-14
问题内容

按照javadoc的通知,唤醒正在此对象的监视器上等待的单个线程。如果有任何线程在此对象上等待,则选择其中一个唤醒。选择是任意的,并且可以根据实现情况进行选择。线程通过调用其中一个wait方法在对象的监视器上等待。

我想知道如何通过通知实现此行为。我在许多站点上都读到它发出信号,但是信号在这里意味着什么?

notify是直接向第一个等待线程发送信号还是向线程调度程序发送信号?


问题答案:

它不会将其发送到第一个线程,而是发送到 任何 等待的线程(但仅发送到一个线程)。

您应该更仔细地阅读Javadoc。

信号也可能是一个坏名字,“通知”更好。该机制的实际实现对Java程序员是透明的,除非您对Java内部结构感兴趣,否则不需要了解任何技术实现…。然后,我建议您检查OpenJDK源代码。



 类似资料:
  • iOS“推送”通知如何在不需要轮询服务器的情况下发送到特定设备? 例如,假设我在脸书上收到了一条新消息。Facebook通知苹果,我的设备应该收到这样的通知。但是苹果如何知道将消息推送到哪个设备/IP呢?

  • 考虑有两个线程正在等待执行同步块。现在有机会在这种情况下等待,我真的需要调用notify()吗?我认为当同步块执行完成时,其他线程会释放锁吗?notify()方法的确切用途是什么? 线程专家请解释?

  • 我使用显示Firestore中的数据并对数据进行分页。我想在Firestore更改时用新数据刷新适配器。在我想通知数据时不起作用。当前我调用以下命令:

  • 我创建了一个方面,用于在某些方法执行之前拦截它们,使用AspectJ如下所示 编写的自定义注释如下所示 我面临的问题是我的方法中的第二个论点。如果我试图在我的方面中获得注释作为第二个参数,应用程序将以下面的错误开始失败。 由:java.lang.IllegalArgumentException引起:错误::0在org.aspectj.weaver.tools.pointCutParser.Pars

  • 我想模拟Gmail关于通知栏通知的应用程序行为,它符合推荐的Android模式:http://developer.Android.com/design/patterns/notifications.html 即特定于单个邮件的通知,点击该通知将显示该特定电子邮件的屏幕。如果我通过刷清或使用“清除所有”清除通知,那么当我得到一个新消息时,我将得到另一个消息特定的通知。但如果我没有清除它,而我又收到另

  • 问题内容: 我很好奇java如何通过使用Object API的hashCode()方法生成哈希值? 问题答案: Java不会生成hashCode(),即此处没有自动发生的情况。但是,根据对象实例的内存地址生成HashCode。大多数类(尤其是如果要在任何API中使用它的类)都应该实现自己的HashCode(并通过契约使用自己的equals方法)。