一个java多线程问题

新手上路,请多包涵

主方法起一个线程,线程先休眠一秒,然后设置线程中的一个变量,然后打印一些信息表示执行完毕。主方法这边轮询检查线程变量是否有值,一旦有值则跳出循环,打印一下信息表示执行完毕。

关键来了。

如果注释掉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");
    }

}
阅读 1.9k
2 个回答

这个问题我回答过不止一次啦。你可以看看我写的文章:volatile 关键字的使用 的第一节,保证内存可见性

String name前面加上volatile试试看。

推荐问题
宣传栏