例示代码如下:
package com.company.cas;
//使用CAS实现一个线程安全的计数器
public class CASTest {
public static void main(String[] args) {
CASCounter casCounter=new CASCounter();
for (int i = 0; i < 100; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(casCounter.incrementAndGet());
}
}).start();
}
}
}
class CASCounter{
volatile private long value;
public long getValue() {
return value;
}
//定义Compare and swap方法
private boolean compareAndSwap(long expectedValue,long newValue){
//如果当前值与期望值一样就把当前的value替换文newValue值
synchronized (this){
if (value==expectedValue){
value=newValue;
return true;
}else {
return false;
}
}
}
//定义自增的方法
public long incrementAndGet(){
long oldValue;
long newValue;
do {
oldValue=value;
newValue=oldValue;
}while (compareAndSwap(oldValue,newValue));
return newValue;
}
}
本文介绍了如何利用Java的CAS(Compare and Swap)原子操作来实现一个线程安全的计数器,确保在多线程并发环境下计数的正确性。

984

被折叠的 条评论
为什么被折叠?



