如何在JVM级别等待/通知工作?

时间:2013-10-08 12:25:47

标签: java concurrency synchronization message-queue compare-and-swap

等待和通知看起来像是在线程之间传递的消息,如果这是真的,则必须有用于缓冲这些消息的队列。如果是这样,那么必须有用于向队列添加消息和从队列中删除消息的原子操作,每个侦听这些消息的Java线程也必须有一个帮助线程吗?

很高兴听到你的想法。

2 个答案:

答案 0 :(得分:1)

  

等待并通知看起来像是在线程之间传递的消息,

他们真的不是消息。当线程调用wait()时,它将自己置于与特定对象监视器关联的等待队列中。当另一个线程调用notify()时,它将第一个线程(如果有的话)拉出队列并将其放入“运行”队列。它是关于改变线程状态并将线程放入队列而不是线程之间的消息。

  

如果是这样,那么必须有原子操作来向队列添加消息和从队列中删除消息

很可能围绕消息队列存在 not 原子操作,但是在测试/设置内存位置方面肯定存在原子操作,这有助于获取锁并解决其他线程争用。

  

每个侦听这些消息的Java线程都必须有一个帮助线程吗?

每个Java线程肯定有 not 辅助线程。当Java线程从一个状态转换到另一个状态或者是时间切片时,它们具有相关的OS线程,该线程维持其状态并执行所有消息传递和信令。大多数(如果不是全部)实现也具有操作系统和硬件,它负责线程调度,使JVM本机代码执行Java记帐。

答案 1 :(得分:0)

JVM使用操作系统提供的原语,有时使用第三方库提供的原语。没有JVM本身实现这些东西。 Windows JVM通常使用Windows线程,而在Linux上,实现可以使用Linux内核线程或POSIX线程(pthreads)库。在Mac OS X上,选项包括pthreads或Cocoa NSThread