pip*_*lam 1 java multithreading
我试图了解线程。我写了简单的程序。
public class Main {
static int counter = 0;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter++;
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter++;
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(counter);
}
}
Run Code Online (Sandbox Code Playgroud)
结果始终是2000,但是我不知道为什么。任何运行方法都不同步,所以为什么它总是给我相同的结果。
如果我写:
t1.start();
t1.join();
System.out.println(counter);
t2.start();
System.out.println(counter);
Run Code Online (Sandbox Code Playgroud)
然后我得到结果:1000,1000。为什么总是等于1000?
结果始终是2000,但是我不知道为什么。
因为您很幸运在两个线程之间没有任何竞争状况。仅仅因为一个竞争条件可能会发生并不意味着它保证的情况发生。
为什么总是等于1000?
因为当您第二次打印计数器时,第二个线程尚未执行。或者是因为它已经执行,但是由于缺乏同步而没有可见性保证,因此主线程仍然可以看到最新值。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |