正如我从“实践中的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;
}
}
}