返回

提问 添加收藏

java 多线程中的一个奇怪的地方,希望有识之人帮助解答疑惑

码上中国博客 发布于 2020年02月14日 (共有2个回帖)

简单一个例子如下:

public class VolatileTest {
	public static void main(String[] args) throws InterruptedException {
		MyThread1 myThread1 = new MyThread1();
		myThread1.start();
		Thread.sleep(3000);
		myThread1.setFlag(false);
		Thread.sleep(1000);
		System.out.println("flag:"+myThread1.flag);
		System.out.println("结束");
	}
}
class MyThread1 extends Thread{
	
	public boolean flag = true;
	
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	
	@Override
	public void run() {
		System.out.println("线程开始>>>>>>>>>>>>>");
		while (flag) {
//			System.out.println("运行中,子线程:"+Thread.currentThread().getName());
		}
		System.out.println("线程结束");
	}
	
}

在实际运行中,可以尝试分别注释和不注释下面的代码

System.out.println("运行中,子线程:"+Thread.currentThread().getName());

会产生不同的效果。

例如,不注释的话,线程会打印上面的日志,直到整个线程终结,eclipse的控制台的运行标志也会变灰(这是重点)

但是如果注释掉上面这行代码,则eclipse的控制台运行标志会一直为运行状态红色(运行中)

初学多线程,请有识之士帮助解决下这个原理是什么。

java-thread-sanitizer$tag.name()$tag.name()
文明上网,理性发言
客户端 Android iPhone WP7