Java 如何在实现runnable的两个子类之间共享变量
我有一个主类和两个子类,子类1和子类2实现了runnable 我同时运行了两个线程 打电话 t1.start//t1用于子类1 t2.start//t2子类2 现在,我希望t1运行到t2完成 我可以在子类2中的方法中添加一个布尔标志,以识别执行已经完成; 现在我需要将该信息(布尔变量)传递给子类1,以停止其中一组代码的执行。[已使用while(true)循环;] 那么我如何创建一个可以被两个子类访问的公共变量呢Java 如何在实现runnable的两个子类之间共享变量,java,multithreading,Java,Multithreading,我有一个主类和两个子类,子类1和子类2实现了runnable 我同时运行了两个线程 打电话 t1.start//t1用于子类1 t2.start//t2子类2 现在,我希望t1运行到t2完成 我可以在子类2中的方法中添加一个布尔标志,以识别执行已经完成; 现在我需要将该信息(布尔变量)传递给子类1,以停止其中一组代码的执行。[已使用while(true)循环;] 那么我如何创建一个可以被两个子类访问的公共变量呢 有人能为我推荐一个解决方案吗?如果可能的话,我建议避免在并发环境中共享可变状态,但假
有人能为我推荐一个解决方案吗?如果可能的话,我建议避免在并发环境中共享可变状态,但假设您遇到无法避免的情况,您可以尝试以下方法(根据您自己的需要进行调整):
基本上,在外部创建
SharedState
并在创建时注入子类(或者在其中一个子类中创建它,检索并注入另一个子类,等等)。然后使用该共享变量,记住您所知道的共享状态的种种诡计。如果可能的话,我建议避免在并发环境中共享可变状态,但假设您遇到无法避免的情况,您可以尝试以下方法(根据您自己的需要进行调整):
基本上,在外部创建
SharedState
并在创建时注入子类(或者在其中一个子类中创建它,检索并注入另一个子类,等等)。然后使用该共享变量,记住您所知道的关于共享状态的种种诡计。将一个原子布尔值传递给子类
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
}
}
}
实现子类2
作为练习留给OP
向子类传递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
}
}
}
实现子类2
作为练习留给OP
展示一些代码来解释发生了什么。子类1和子类2是主类的内部类吗?您总是可以将相同的引用传递给这两个子类。问题是由您的措辞引起的。您不希望在类之间共享变量,但希望在两个实例之间共享对象。解决方法很简单:构造共享对象。将共享对象传递给可运行实现的构造函数。显示一些代码来解释发生了什么。子类1和子类2是主类的内部类吗?您总是可以将相同的引用传递给这两个子类。问题是由您的措辞引起的。您不希望在类之间共享变量,但希望在两个实例之间共享对象。解决方法很简单:构造共享对象。将共享对象传递给可运行实现的构造函数。感谢您的响应:)感谢您的回复:)一个问题通常有一个简单的解决方案。