Public Java 线程安全的最终互斥锁

Public final mutex for Java thread safety

在我的项目中,我必须使用一个class X,它提供了很多方法,但是文档没有提到这些方法是否是线程安全的,我没有源代码。

所以我用互斥锁将 X 封装在另一个 class 中:

public class MyX {
    private X instance;
    public final Object mutex = new Object();
    public MyX () {
        this.instance = new X();
    }
    public X getMethods () {
        return this.instance;
    }
}

当我需要调用X的方法时,我使用了一个synchronized块:

MyX myX = new MyX();
synchronized (myX.mutex) {
    X methods = myX.getMethods();
    methods.method1();
    methods.method2();
    ... ... ...
}

或者,也许我可以直接在 class X:

的实例上同步
X instance = new X();
synchronized(instance) {
    instance.method1();
    instance.method2();
    ... ... ...
}

我想知道走哪条路更好,有没有更好的设计来解决这个问题。

谢谢。

如果你想在相同 class 的两个方法之间进行同步,那么你应该选择互斥锁。

将互斥量作为 public 变量公开是违反面向对象原则的,因此当然不推荐。

我认为,在 class 之外工作时,锁定您正在处理的对象是最好的选择。

X instance = new X();
synchronized(instance) {
instance.method1();
instance.method2();
... ... ...
}