java通过其类的两个实例使用扩展线程导致值跳过
我有下一个我正在尝试运行的示例,但有时它运行良好,另一个示例没有退出循环。我只能想象,由于某些原因,值正在跳过。 通过跳过这些值,我指的是用来通知类闪光器中的循环退出的标志,这些标志是从类引擎中带出来的,也指用来通知类闪光器中的循环的标志。 这就是我如何理解它可以以尽可能最好、最简单的方式运行的原因,但到底发生了什么? 你能帮忙吗
//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();
}
}
}
# 1 楼答案
JVM正在缓存您的变量。您需要将volatile添加到检查变量中(Terminator、roboCop)。这将确保所有线程向主内存写入/读取最新值
这里的详细解释是similar question