主方法起一个线程,线程先休眠一秒,然后设置线程中的一个变量,然后打印一些信息表示执行完毕。主方法这边轮询检查线程变量是否有值,一旦有值则跳出循环,打印一下信息表示执行完毕。
关键来了。
如果注释掉System.out.println("xuanxue");
,那么主方法永远也跑不完,去掉注释就 ok。目前没有头绪,求各位大佬指教。
代码如下
/***App.java***/
public class App {
public static void main(String[] args) throws Exception{
Test1 test1 = new Test1();
new Thread(test1).start();
int i = 0;
while (test1.getName() == null){
// 关键点
//System.out.println("xuanxue");
i++;
}
System.out.println(test1.getName() + " " + i);
}
}
/*** Test1.java***/
public class Test1 implements Runnable{
String name;
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
name = "test1";
System.out.println("set name over");
}
}
这个问题我回答过不止一次啦。你可以看看我写的文章:volatile 关键字的使用 的第一节,保证内存可见性