gpt4 book ai didi

Java并发尝试加锁

转载 作者:行者123 更新时间:2023-11-29 05:38:20 25 4
gpt4 key购买 nike

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
}
}

第一次尝试锁定设法成功锁定对象。关于第二次尝试,我认为第二次尝试锁定将返回 false,因为对象尚未解锁。但是它再次返回 true!!

有什么解释吗?

最佳答案

引用自ReentrantLock.tryLock() Javadocs :

If the current thread already holds this lock then the hold count is incremented by one and the method returns true.

如果另一个 线程尝试执行锁定,那么它将返回false。但由于再次锁定的是同一个线程,它将返回 true 并将保持计数递增 1。这意味着您必须 unlock() 它两次,其他线程才能获得 lock()

您可以通过查看保持计数来了解这一点:

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());

关于Java并发尝试加锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18660213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com