作用对象
对象方法wait,notify,notifyAll
线程方法sleep
使用方法
synchronized(obj){
Thread.sleep(1000);//只是使这块延长时间结束,不释放锁,间接使锁延长
...
}
synchronized(obj){
obj.wait(10);//立即释放锁,时间到后自动苏醒或被notifty唤醒,唤醒后待重新拿到锁时再执行后续代码
...
}
synchronized(obj){
obj.notify();//唤醒wait的线程,告诉它锁即将被释放,继续执行后续代码,执行完释放锁
...
}
synchronized(obj){
obj.notifyAll();//唤醒所有wait的线程,具体效果参考notify
...
}
关键点
- sleep不释放锁,wait释放锁
- 线程调用notify的时候,当前线程正持有锁,因此,其他线程虽被唤醒,但是仍无法获得锁。直到该线程退出synchronized这个方法(即执行完),释放锁后,其他线程才有机会去抢夺,去获得锁继续执行。