在我的项目中,我必须使用一个类X
,它提供了很多方法,但文档没有提到这些方法是否是线程安全的,而且我没有源代码要么。
所以我用互斥锁将 X
封装在另一个类中:
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
block :
MyX myX = new MyX();
synchronized (myX.mutex) {
X methods = myX.getMethods();
methods.method1();
methods.method2();
... ... ...
}
或者,也许我可以直接在类 X
的实例上同步:
X instance = new X();
synchronized(instance) {
instance.method1();
instance.method2();
... ... ...
}
我想知道走哪条路更好,是否有更好的设计来解决这个问题。
谢谢。
最佳答案
如果您想在同一类的两个方法之间进行同步,那么您应该选择互斥体。
将互斥体公开为公共(public)变量违反了面向对象的原则,因此当然不推荐。
我认为,在类外工作时,获取正在处理的对象的锁是最好的选择。
X instance = new X();
synchronized(instance) {
instance.method1();
instance.method2();
... ... ...
}
关于java - 用于 Java 线程安全的公共(public)最终互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36446448/