在我的博客
测试volatile不具有原子性,加volatile还用加sysnchronized吗?加sysnchronized还用加volatile吗
中讲到加volatile还加sysnchronized好麻烦,能不能有别的办法呢?
有的,我们可以通过cas操作来实现线程安全
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* cas无锁优化,自旋锁 实例:Atomic类
* 上一节我们讲到多个线程来操作count++的时候,需要加volatile和snychronized来保证线程的安全性
* 这次我们用cas来保证线程安全
*/
public class CASDemo {
//jdk自带的int类型的自增用AtomicInger是线程安全的
AtomicInteger count=new AtomicInteger();
public void sumCount(){
for (int i = 0; i <1000 ; i++) {
count.incrementAndGet();
}
}
public static void main(String[] args) {
CASDemo t=new CASDemo();
List<Thread> threads=new ArrayList<>();
for (int i = 0; i <10 ; i++) {
threads.add(new Thread(() ->{
t.sumCount();
}));
}
threads.forEach((o)->{
o.start();
});
threads.forEach((o)->{
try {
o.join(); //保证main线程到当前线程执行完成后再执行
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println(t.count);
}
}