[英]How to share a variable between two sub classes that implements runnable
我有一個主類和兩個子類,subClass1和subClass2實現可運行...
我同時運行了兩個線程
通過打電話
t1.start //子類1的t1
t2.start //子類2的t2
現在,我希望t1運行到t2完成。
我可以在subclass2的方法中添加一個布爾標志,以識別執行已完成; 現在,我需要將該信息(布爾變量)傳遞給subclass1,以停止執行其中的一組代碼。 [使用了while(true)循環;]
那么如何創建兩個子類都可以訪問的公共變量?
有人可以建議我解決這個問題嗎?
將AtomicBoolean
傳遞給子類。
public class SubClass1 implements Runnable {
private AtomicBoolean b;
public SubClass1(AtomicBoolean b) {
this.b = b;
}
public void run() {
while(b.get()) { // Assuming SubClass2 sets it to false when it's no longer running
// Do something
}
}
}
將SubClass2
實現留給OP
。
如果可能的話,我建議避免在並發環境中共享可變狀態,但是如果您遇到其中一種無法避免的狀態,則可以嘗試以下方法(根據自己的需要進行調整):
class SharedState {
public final Object mutex = new Object();
public boolean variable;
}
class Subclass extends MyClass1 implements Runnable {
private SharedState sharedState;
public Subclass1(SharedState sharedState) {
this.sharedState = sharedState;
}
// ...
@Override
public void run() {
// ...
synchronized(sharedState.mutex) {
// access sharedState.variable
}
// ...
}
}
基本上是在外部創建SharedState
並在創建時注入到您的子類中(或在其中一個子類中創建它,然后檢索並注入到另一個子類中,無論如何)。 然后使用該共享變量記住所有有關共享狀態的棘手知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.