Lock接口使用
- void lock() 获取锁(不死不休)方法不允许Thread.interrupt中断,即使检测到Thread.isInterrupted,一样会继续尝试获取锁,失败则继续休眠。只是在最后获取锁成功后再把当前线程置为interrupted状态,然后再中断线程。
- bollean tryLock() 获取锁(浅尝辄止,尝试获取锁)
- boolean tryLock(long time,TimeUnit unit)throws InterruptedExcepiton 获取锁(过时不候,在指定时间内尝试获取锁)
- void lockInterruptibly() throws InterruptedExcepion; 获取锁(任人摆布),允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。
- void unlock(); 释放锁,
结论: 1. lock()最常用;lockInterruptibly()方法一般更昂贵,只有真的需要相应中断时,才是用。
Condition 和Lock一起使用
调用condition.signal/await(会释放锁)前必须获取到该锁才能执行,和synchronization方法体内调用wait/notify一样。如下面代码:
private static
|