我有一个主类和两个子类,subClass1和subClass2实现了runnable ......
我已经同时运行了两个线程
致电
t1.start // t1 for subclass1
t2.start // t2 for subclass2
现在,我希望t1一直运行直到t2完成。
我可以在子类2的方法中添加一个布尔标志,以识别执行已完成; 现在我需要将该信息(布尔变量)传递给subclass1以停止从其中执行一组代码。 [使用while(true)loop;]
那么如何创建一个可以被两个子类访问的公共变量呢?
有人可以为我建议一个解决方案吗?
答案 0 :(得分:3)
将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
的练习。
答案 1 :(得分:1)
如果可能,我建议避免在并发环境中共享可变状态,但假设您遇到无法避免的情况之一,您可以尝试类似的事情(根据自己的需要进行调整):
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
并在创建时注入子类(或者在其中一个中创建它,检索并注入另一个,无论如何)。然后使用该共享变量记住您对共享状态的棘手的所有了解。