gpt4 book ai didi

java - 在 lockObject 上同步和使用它作为锁有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 20:36:17 25 4
gpt4 key购买 nike

我知道同步方法和同步块(synchronized block)之间的区别,但我不确定同步块(synchronized block)部分。

假设我有这个代码

class Test {
private int x=0;
private Object lockObject = new Object();

public void incBlock() {
synchronized(lockObject) {
x++;
}
System.out.println("x="+x);
}

public void incThis() { // same as synchronized method
synchronized(this) {
x++;
}
System.out.println("x="+x);
}
}

在这种情况下,使用 lockObject 和使用 this 作为锁有什么区别?对我来说似乎是一样的..

当你决定使用同步块(synchronized block)时,你如何决定哪个对象是锁?

最佳答案

就我个人而言,我几乎从不锁定“这个”。我通常锁定一个私有(private)持有的引用,我知道没有其他代码会锁定它。如果您锁定“this”,那么 any 其他知道您的对象的代码可能会选择锁定它。虽然不太可能发生,但它肯定会发生 - 并且可能导致死锁,或者只是过度锁定。

你锁定的东西并没有什么特别神奇的地方——你可以把它看作是一种象征,很有效。任何使用相同 token 锁定的人都将尝试获取相同的锁定。除非您希望其他代码能够获取相同的锁,否则请使用私有(private)变量。我鼓励你将变量设为final - 我不记得我曾曾经想要更改锁的情况对象生命周期内的变量。

关于java - 在 lockObject 上同步和使用它作为锁有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369287/

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