スレッドが によってロックされたクリティカル セクションにある間、スレッドを何らかの方法で 1 秒間停止する必要がありますReentrantLock
。
私のコードは次のとおりです。
public class Lock implements Runnable {
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + " is running !");
lock.wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
Lock lock = new Lock();
Thread thread = new Thread(lock);
thread.start();
}
}
run() メソッドを呼び出すとlock.wait(1000)
、 がスローされIllegalMonitorStateException
ます。
lock.lock()
方法でモニターを取得した場合、この例外が発生するのはなぜですか?
super.wait(1000)
の代わりに呼び出すと同じことが起こりlock.wait(1000)
ます。