java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?
胜博发娱乐手机版
胜博发娱乐手机版
当前位置 : 胜博发娱乐手机版 > 胜博发娱乐手机客户端下载

java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?

我想在主线程里启用两个线程,这两个线程采用两个不同实现的Runnable对象,记作A和B。
我的意图是当采用B的线程运行完成后通知A线程,首先我尝试了如下设计:

class Run {
    
    public static void mainString[] args {
        new Threadnew A.start;
        new Threadnew 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 mainString[] args {
        new Threadnew A.start;
        new Threadnew 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
    }
}

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

提前谢过大家!

广告位

胜博发娱乐手机版