- 线程在调用
lock
方法获得另一个线程所持有的锁的时候,很可能发生阻塞。应该更加谨慎地申请锁。tryLock
方法试图申请一个锁,在成功获得锁后返回true,否则,立即返回false,而且线程可以立即离开去做其他事情。
if(myLock.tryLock()){
//获得锁
try{...}
finally {
myLock.unlock();
}
}else {
//去做其他事情
}
if(myLock.tryLock(100, TimeUnit.MILLISECONDS))
TimeUnit
是一个枚举类型,可以取的值包括TimeUnit.SECONDS
(秒),TimeUnit.MILLISECONDS
(毫秒), TimeUnit.MICROSECONDS
(微秒)和TimeUnit.NANOSECONDS
(纳秒)
lock
方法不能被打断。如果一个线程在等待获得一个锁时被中断,中断线程在获得锁之前一直处于阻塞状态。如果出现死锁,那么,lock
方法就无法终止。
- 然而,如果调用带有用超时参数的
tryLock
,那么如果线程在等待期间被打断,将抛出InterruptedException
异常。这是一个非常有用的特性,因为允许程序打破死锁。
- 也可以调用
lockInterruptibly
方