我们都知道,为了调用Object.wait(),这个调用必须放在synchronized块中,否则IllegalMonitorStateException抛出一个.但是这个限制的原因是什么?我知道wait()释放监视器,但为什么我们需要通过使特定块同步显式获取监视器,然后通过调用释放监视器wait()?
如果可以wait()在同步块之外调用,保留它的语义 - 暂停调用程序线程,可能造成的损害是什么?
难道一个while(true)共同的Java循环与wait(1)利用更多或更少的资源比用封闭循环wait()和notify()?
CPU内核是否允许一些特殊(硬件)实现wait(1)?如果是,使用这种非阻塞循环时是否有任何限制?
一个例子:
while(true){
wait(1);
//do the job here...
}
Run Code Online (Sandbox Code Playgroud)
(只是一个注意事项:如果没有wait(1)一个核心将在while(true)循环中100%激进......)