Java可共享变量可见性

时间:2018-03-11 16:42:53

标签: java multithreading concurrency

正如我从“实践中的Java并发”中理解的那样,当一个线程更改某些可共享的var值时,不能保证第二个线程看到该新值,除非它在读取之前使用与第一个线程相同的锁。 (第37页,图3.1)。 我做了一点测试,发现每次我在一个线程中更改一些var值,第二个总是看到它!没有任何同步。我有什么问题?

我的代码:

public class Application {
    public int a = 5;
    public int b = 3;

    public static void main(String[] args) throws InterruptedException {
        final Application app = new Application();

        for (int i = 0; i < 20000; i++) {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    app.a = 0;
                    app.b = 0;
                }
            });
            t.start();
            t.join();

            if (app.a == 5 || app.b==3) System.out.println("Old value!");
            app.a = 5;
            app.b = 3;
        }
    }
}

0 个答案:

没有答案