gpt4 book ai didi

java - 如果你锁定了一个对象,你是否锁定了它的所有方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:22 24 4
gpt4 key购买 nike

假设我们有一个对象 foo:

class Foo(){
public synchronized void instanceMethod(){}
}

var foo = new Foo();

如果我锁定了 foo:

synchronized(foo){
foo.instanceMethod();
}

我是否也锁定了 instanceMethod() 调用?另一种提问方式 - 如果我锁定了 foo,另一个线程是否可以(同时)调用 foo.instanceMethod()?

最佳答案

if I have a lock on foo, can another thread call foo.instanceMethod()?

他们可以调用它,但是调用会等到执行离开你的 block synchronized on foo,因为 instanceMethodsynchronized 。声明一个实例方法synchronized 大致等同于将其整个主体放在this 上的synchronized block 中。

如果instanceMethod没有同步,那么调用当然不会等待。

但是请注意,您所显示的 synchronized block 是不必要的:

synchronized(foo){       // <==== Unnecessary
foo.instanceMethod();
}

因为 instanceMethod同步的,所以可以是:

foo.instanceMethod();

...除非 block 中还有其他东西。

关于java - 如果你锁定了一个对象,你是否锁定了它的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626010/

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