3
我正在使用公共Java API来构建我的多线程应用程序,但我不知道此API的某些方法是否是线程安全的[的确,我真的认为他们不是'吨]。在自己的类中阻止对特定属性的访问
我一直在寻找最干净和直接的方式来实现这个安全的代码,并决定使用lambda表达式。
我打算用这样的:
public class Myclass {
private NotThreadSafe obj;
public Myclass() {
this.obj = new NotThreadSafe();
}
private synchronized void useNonThreadSafeObject(FunctionalInterface r) {
r.exec(this.obj);
}
private void method1() {
this.useNonThreadSafeObject((NotThreadSafe p)->{/*do stuff*/};);
}
private void method2() {
this.obj.someMethod();
}
/* any other methods */
}
我想确保在MYCLASS没有一种方法会直接打电话到“OBJ”
所以所有方法都必须使用OBJ作为方法1做,避免直接调用方法2
当然java doens't有一个修饰符来做到这一点,但我想知道是否是一种注释或其他方式来检查它在编译时...
---- [我是不是在第一次清楚,试图解释更多] ----
什么是r?它以什么方式保证已同步的线程安全? – pvg
@mk这实际上不是我的问题的答案。 – pvg
@pvg它可以让你传入任何代码,它将在'apiObjectNonThreadSafeObject'上运行。另一种方法是公开'apiObjectNonThreadSafeObject',但是不能保证使用它的代码会用'synchronize'来包装它。 –