首页 新闻 会员 周边 捐助

java高并发编程(前提:该代码有问题)求指导

0
悬赏园豆:20 [待解决问题]


public class NoVisibility {
    private static boolean ready;
    private static int number;
    private static class ReaderThread extends Thread{

        @Override
        public void run() {
            while(!ready)
                Thread.yield();
            System.out.println(number);    
        }
        
    }
    
    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}

神圣兽国窝窝乡独行侠的主页 神圣兽国窝窝乡独行侠 | 初学一级 | 园豆:184
提问于:2015-04-20 17:42
< >
分享
所有回答(2)
0

1、不知道你想问什么

2、对java不懂,Thread.yield()干吗的?只是简单的休息吗?

3、能正确运行,运行的结果是输出42,绝对不会有问题,但你感觉不出来线程并发的。

4、也许什么都没输出就退出了。

519740105 | 园豆:5810 (大侠五级) | 2015-04-20 19:20
0

private static boolean ready;
    private static int number;

1、这两个变量会碰到高速缓存一致性问题,因此需要使用 volatile 修饰。

2、修改这两个变量的值的时候请使用 InterlockedXXX 方法。

Launcher | 园豆:45050 (高人七级) | 2015-04-21 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册