为什么Object.wait()/notify()/notifyAll() 之前必须获得锁? 这是JLS的规定。Wait-notify机制是围绕监控器锁进行的,获得锁是很自然的前提,自身没有拿到锁之前,怎么能够尝试去操作靠锁来调控的线程呢?不过今天偶尔有时间,就看下Sun Hotspot是怎么实现这一机制的。
当我们执行下面的代码时,线程会抛出异常java.lang.IllegalMonitorStateException: current thread not owner。
publicclass WaitNotifyCompilerCode { privateString aString ="Hello World!"; publicstaticvoid main(String[] args){ System.out.println("Execute start ....");final WaitNotifyCompilerCode w =new WaitNotifyCompilerCode(); w.wait1SecAndPrintString();System.out.println("Execute end ....");} publicvoid wait1SecAndPrintString(){