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'來包裝它。 –