引言
高并发环境下,多线程可能需要同时访问一个资源,并交替执行非原子性的操作,很容易出现最终结果与期望值相违背的情况,或者直接引发程序错误。
举个简单示例,存在一个初始静态变量count=0,两个线程分别对count进行100000次加1操作,期望的结果是200000,实际是这样的吗?写个程序跑下看看:
public class CountWithoutSyn {
private volatile static int count = 0;
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(2);
// 启动线程A
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<100000; i++){
count++;
}
countDownLatch.countDown();
}
}).start();
// 启动线程B
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<100000; i++){
cou