volatile,Atomic ,synchronized性能和同步测试程序

2014-11-24 08:39:14 · 作者: · 浏览: 1
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