我想通过外部标识符终止线程的执行,然而发现几个奇怪的地方。
public class TerminateThread implements Runnable {
//1、外部标识
private boolean flag = true;
private String name;
public TerminateThread(String name) {
this.name = name;
}
@Override
public void run() {
int i = 0;
//2、关联标识,true-->运行 -->false停止
while (flag) {
System.out.println(name + "-->" + i++);
}
}
//3、对外提供方法改变标识
public void terminate() {
this.flag = false;
}
public static void main(String[] args) {
TerminateThread tt = new TerminateThread("C罗");
new Thread(tt).start();
for(int i = 0; i <= 99; i++) {
if(i == 88) {
tt.terminate();
System.out.println("tt gameover");
}
System.out.println("main-->" + i);
}
}
}
这个程序运行下来大部分是在打完了main-->99后又打印了C罗-->0,但是这个时候flag应该为false了呀。
还有一些奇怪的地方,比如run方法里打印的那行代码,如果我不打印name那么程序执行的结果就正常了,至少不会在flag为false后还打印,而且terminate函数里我一开始写的没有this关键字,我发现这个会影响结果,求教