import java.util.concurrent.atomic.AtomicInteger;
public class Counter {
public static int count=0;
public static volatile int volatileCount = 0;
public static AtomicInteger atomicCount = new AtomicInteger(0);
public static byte[] lock=new byte[0];
public static int syCount=0;
public static void sleep(final int gap){
try {
Thread.sleep(gap);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void incrInt(final int gap){
count++;
sleep(gap);
}
public static void incrVolatileInt(int gap){
volatileCount++;//和volatileCount上一个状态相关,不具于原子性
sleep(gap);
}
public static void incrAtomicInt(final int gap) {
//第一种方式:
//int tmp=atomicCount.get();
//atomicCount.getAndSet(tmp+1);//注意:tmp+1不具原子性
//第二种方式:
atomicCount.getAndIncrement();//具备原子性的
sleep(gap);
}
public static void incrSynInt(final int gap){
synchronized(lock){
syCount++;
sleep(gap);
}
}
public static void testInt(int count,final int gap){
long st=System.currentTimeMillis();
Thread threads[]=new Thread[count];
for (int i = 0; i < count; i++) {
threads[i]=new Thread(new Runnable() {
@Override
public void run() {
Counter.incrInt(gap);
}
});
threads[i].start();
}
for(int i=0;i