gpt4 book ai didi

java - 与一个虚拟对象而不是这个同步

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:16 24 4
gpt4 key购买 nike

我遇到过几次类似下面的代码

class Foo {
private Object lock = new Object();

public void doSomething() {
synchronized(lock) {
...

我感兴趣的是为什么要创建一个锁对象而不是写synchronized(this)?是否可以启用共享锁?我依稀记得读过它是一种优化。真的吗?此外,在某些情况下,将锁声明为 final 是否有意义?

最佳答案

  1. 不鼓励在 this 上同步,因为如果对象本身被用作外部锁,它会破坏内部同步。另外,请记住 synchronized 方法也将 this 用作锁,这可能会导致不良影响。
  2. 建议将锁声明为 final,以防止在 synchronized block 中重新分配锁对象,从而导致不同的线程看到不同的锁对象。请参阅另一个问题:Locking on a mutable object - Why is it considered a bad practice?

关于java - 与一个虚拟对象而不是这个同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11275377/

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