两个线程一起执行,程序可能的执行结果
1. 两个线程并发
2. 两个线程不并发
3. 两个线程部分并发
int a = 0;
bllean result = dalse;
for(int i = 1 ; i <= 2 ; i++){
if(i % 2 == 1)
result =true;
else
result = false;
a += i * (result ? 1 : -1);
}
(1)两个线程AB不并发:按顺序执行A和B
先执行A
i = 1,a = 1; i = 2,a = -1
再执行B(此时a默认值为-1)
i =1 ,a = 0; i = 2,a = -2
(2)两个线程AB完全并发:同时执行,导致读写冲突,最终结果相当于只执行了A线程,a=-1
(3)两个线程部分并发:
假设A线程先执行:i = 1 , a = 1;当A线程准备执行i = 2时,B线程抢走了cpu资源(时间),换成执行B线程了。
在a 取值变成1,执行B线程的 i = 1,a = 1 + 1*1 =2。
再执行 i = 2 是,a = 2 + 2*(-1) = 0