- on object moniter 意味着当前线程未持有锁
- Thread.sleep() vs. LockSupport.park()
a.两者都释放cpu执行权,但未释放锁;
b.两者均可响应中断(t.interrupt()),但Thread.sleep()需要捕获中断异常,并且重置中断状态,LockSupport.park()直接向下执行,并且不会重置中断状态;
c.LockSupport.park()可以通过ockSupport.unpark(t)唤醒,Thread.sleep() 只能等待睡眠时间到期恢复。 - Thread.sleep() vs.object.wait()
a.Thread.sleep()释放cpu执行权,不释放锁;object.wait()释放cpu执行权,释放锁;
b.object.wait()必须在以object为锁的同步块中,其他线程可以通过object.notify()唤醒,唤醒后需要竞争锁资源;
c.两者都需要捕获中断异常 - Thread.yield()让渡cpu执行权,仍持有锁,并且线程仍然活跃,随时可能被执行;
- t1.join() 通过o.wait()实现,锁资源为t1自身