use*_*431 19 java multithreading synchronization shared
我想在多个线程之间共享一个变量,如下所示:
boolean flag = true;
T1 main = new T1();
T2 help = new T2();
main.start();
help.start();
Run Code Online (Sandbox Code Playgroud)
我想flag在main和help线程之间共享,这些是我创建的两个不同的Java类.有办法做到这一点吗?谢谢!
Old*_*eon 15
除了其他建议之外 - 您还可以将标志包装在控件类中,并在父类中创建它的最终实例:
public class Test {
class Control {
public volatile boolean flag = false;
}
final Control control = new Control();
class T1 implements Runnable {
@Override
public void run() {
while ( !control.flag ) {
}
}
}
class T2 implements Runnable {
@Override
public void run() {
while ( !control.flag ) {
}
}
}
private void test() {
T1 main = new T1();
T2 help = new T2();
new Thread(main).start();
new Thread(help).start();
}
public static void main(String[] args) throws InterruptedException {
try {
Test test = new Test();
test.test();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用static不会帮助你的情况。
synchronize当一个变量被另一个线程使用时,Using 会锁定它。
您应该使用volatile关键字来保持变量在所有线程之间更新。
使用 volatile 是使类线程安全的另一种方式(如同步、原子包装)。线程安全意味着一个方法或类实例可以被多个线程同时使用,没有任何问题。
为了使其在和的实例之间可见T1,T2您可以使两个类包含对包含变量的对象的引用。
如果要在线程运行时修改变量,则需要考虑同步。最佳方法取决于您的确切要求,但是主要选项如下:
volatile;AtomicBoolean;