簡體   English   中英

如何在實現可運行的兩個子類之間共享變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM