我想知道,在设计一个可以被多个线程安全访问的类时,是否使用了对象实例本身的同步,这是一个很好的做法?
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();
}