围绕私有最终Object实例同步比同步类实例本身更好吗?

时间:2017-07-12 05:49:41

标签: java multithreading

我想知道,在设计一个可以被多个线程安全访问的类时,是否使用了对象实例本身的同步,这是一个很好的做法?

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

其中一个副作用是,当调用者以下列方式使用类实例时,它将阻止其他线程访问foo.fun()

调用者尝试将类实例用作线程监视器

Foo foo = new Foo();
// This will have side effect, which blocks other threads from accessing foo.fun()
synchronized(foo) {
}

我想知道,在Object类中使用私有最终Foo实例作为内部线程监视器,更安全&更好的方法?

public class Foo {
    public void fun() {        
        synchronized (monitor) {
        }
    }
    private final Object monitor = new Object();
}

0 个答案:

没有答案