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

2016/12 01 13:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于胜博发娱乐老虎机的点点滴滴

我想在主线程里启用两个线程,这两个线程采取两个差别完成的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
    }
}

如许可以正常完成告诉进程。但我不明白为什么会是这个后果?原理上跟先前的实行有何差别?

提早谢过大家!

(看完/读完)这篇文章有何感想! 来看看胜博发娱乐老虎机是怎么评论的吧!

--转载请注明: sbf999胜博发老虎机_胜博发娱乐老虎机_sbf999胜博发pt娱乐老虎机 » java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?

发表评论

(必填)