java—通过类的两个示例使用扩展线程会导致值的跳过

plupiseo  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(317)

我有下一个样本,我正试图运行,但有时它运行良好,另一个它是不退出循环。我只能想象,由于某些原因,值正在跳过。通过跳过这些值,我的意思是通知类flasher中的循环退出的标志,这些标志是从类引擎中带出来的,也就是从类flasher中通知类引擎中的循环的标志。这就是我如何理解它可以运行的最佳可能和最简单的方式,但发生了什么?你能帮忙吗?

//Main class:
    public class Flasher {
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) 
        {
            engine en1 = new engine("ZaikoBaiko");
            engine en2 = new engine("MiliVaninili");
            en1.start();
            en2.start();
            int Terminator2 = 0;
            while(!en1.Terminator||!en2.Terminator)
            {
            }
            System.out.println(" owns the last word");
            en1.roboCop = true;
            en2.roboCop = true;
        }

    }

//Thread Class:

public class engine extends Thread
{   
    public String OB;
    public boolean Terminator = true;
    public boolean roboCop = false;
    private Thread t;
    engine(String name)
    {
       OB = name;
       Terminator = false;
    }

    @Override
    public void run()
    {
        int x = 0;
        while(x<100)
        {
            System.out.println(x+":"+OB);
        x++;
        }
        Terminator = true;
        while(!roboCop){}
    }

    @Override
    public void start()
    {
        if(t==null)
        {
            t = new Thread(this,OB);
            t.start();
        }

    }
}
cpjpxq1n

cpjpxq1n1#

jvm正在缓存您的变量。您需要将volatile添加到检查变量(terminator、robocop)。这将确保所有线程向主内存写入/读取最新值。
对于详细的解释,这里有一个类似的问题!

相关问题