静态变量 - java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?
大家讲道理
大家讲道理 2017-04-18 10:17:54
0
0
499

我想在主线程里启用两个线程,这两个线程采用两个不同实现的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
    }
}

这样可以正常完成通知过程。但我不明白为什么会是这个结果?原理上跟先前的尝试有何不同?

提前谢过大家!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

reply all(0)
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!