java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?
我想在主线程里启用两个线程,这两个线程采用两个不同实现的Runnable对象,记作A和B。
我的意图是当采用B的线程运行完成后通知A线程,首先我尝试了如下设计:
class Run {
public static void main(String[] args) {
new Thread(new A()).start();
new Thread(new B()).start();
}
}
class A implements Runnable {
public static volatile boolean isStop = false; // 标记B是否完成运行
public void run() {
while(**! isStop**) { //B结束后A跳出循环
do sth;
}
System.out.println("B has stopped.")
}
}
class B implements Runnable {
public void run() {
do sth;
**A.isStop = true**; // 准备退出,将A中的标志变量改为true
}
}
然而之后在启动这两个线程后,B结束后A仍在循环,即A读到的isStop依然为false.
之后我尝试将isStop变量改到main方法所在类中,大体设计如下:
class Run {
public static volatile boolean isStop = false; // 标记B是否完成运行
public static void main(String[] args) {
new Thread(new A()).start();
new Thread(new B()).start();
}
}
class A implements Runnable {
public void run() {
while(**! Run.isSto**p) { //B结束后A跳出循环
do sth;
}
System.out.println("B has stopped.")
}
}
class B implements Runnable {
public void run() {
do sth;
**Run.isStop = true;** // 准备退出,将Run中的标志变量改为true
}
}
这样可以正常完成通知过程。但我不明白为什么会是这个结果?原理上跟先前的尝试有何不同?
提前谢过大家!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论