Java并发性尝试锁定
第一次尝试锁定会成功锁定对象。 关于第二次尝试,我假设第二次尝试锁定将返回false,因为对象尚未解锁。然而,它再次返回真的 对此有何解释?引自: 如果当前线程已经持有该锁,那么持有计数将增加1,并且该方法返回true 如果另一个线程尝试执行锁定,那么它将返回Java并发性尝试锁定,java,concurrency,locking,Java,Concurrency,Locking,第一次尝试锁定会成功锁定对象。 关于第二次尝试,我假设第二次尝试锁定将返回false,因为对象尚未解锁。然而,它再次返回真的 对此有何解释?引自: 如果当前线程已经持有该锁,那么持有计数将增加1,并且该方法返回true 如果另一个线程尝试执行锁定,那么它将返回false。但是,由于再次锁定的是同一个线程,因此它将返回true,并将保持计数增加1。这意味着您必须在其他线程获得lock()之前将其解锁两次 您可以通过查看保留计数来了解这一点: public class TestConcurrent{
false
。但是,由于再次锁定的是同一个线程,因此它将返回true
,并将保持计数增加1。这意味着您必须在其他线程获得lock()
之前将其解锁两次
您可以通过查看保留计数来了解这一点:
public class TestConcurrent{
public static void main(String args[]){
Lock lock = new ReentrantLock();
boolean b1 = lock.tryLock();
System.out.println(b1); //prints true
boolean b2 = lock.tryLock();
System.out.println(b2); //prints true again
}
}
- 列表项
Lock lock = new ReentrantLock();
assertEquals(0, lock.getHoldCount());
boolean b1 = lock.tryLock();
System.out.println(b1); //prints true
assertEquals(1, lock.getHoldCount());
boolean b2 = lock.tryLock();
System.out.println(b2); //prints true again
assertEquals(2, lock.getHoldCount());
线程不会阻塞y阅读锁的工作原理(在单线程范围内)。谢谢。我只是阅读了接口锁的javadoc,而不是实现类。现在它有意义了
synchronized void x() {
y();
}
synchronized void y() {
}