package q4;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class Counter {
private AtomicInteger atomicInteger=new AtomicInteger(0);
private int i=0;
public static void main(String[] args) {
final Counter cas=new Counter();
List<Thread> ts=new ArrayList<>();
long start=System.currentTimeMillis();
for(int i=0;i<100;i++) {
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10000;i++) {
cas.count();
cas.safeCount();
}
}
});
ts.add(thread);
}
for(Thread t:ts) {
t.start();
}
for(Thread t:ts) {
try {
t.join();
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println(cas.i);
System.out.println(cas.atomicInteger.get());
System.out.println(System.currentTimeMillis());
}
private void count() {
i++;
}
private void safeCount() {
for(;;) {
int i=atomicInteger.get();
boolean suc=atomicInteger.compareAndSet(i, ++i);
if (suc) {
break;
}
}
}
}
CAS实现计数器
最新推荐文章于 2024-05-15 02:12:34 发布