我有下一个样本,我正试图运行,但有时它运行良好,另一个它是不退出循环。我只能想象,由于某些原因,值正在跳过。通过跳过这些值,我的意思是通知类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();
}
}
}
1条答案
按热度按时间cpjpxq1n1#
jvm正在缓存您的变量。您需要将volatile添加到检查变量(terminator、robocop)。这将确保所有线程向主内存写入/读取最新值。
对于详细的解释,这里有一个类似的问题!