当时间片结束时,java线程是否释放锁

时间:2017-05-11 05:11:41

标签: java multithreading locking

 synchronized(objectA)   
{  
//line 1    
//line 2   
//line 3   
//line 4  
}   

假设分配给第3行的结束时间片
这个线程在objectA上获得的锁是否会被释放?????

2 个答案:

答案 0 :(得分:1)

当您将同步块保留在第5行的末尾时,它将被释放。一个单独的线程获得对来自另一个时间片的代码块的访问将被阻止进入整个同步块,直到原始线程再次变为活动状态并离开块。

答案 1 :(得分:-1)

是的,如果我们使用tryLock定义超时,那么它会在指定时间后释放锁定。此功能有助于避免线程之间的死锁。

Lock lock = null;
lock=....;
if (lock.tryLock(15L, TimeUnit.SECONDS)) {
    try {
       ........
    } finally {
        lock.unlock();
    }
} else {
      // do sumthing
}