JUC編のCASアルゴリズム(三)

1481 ワード

JUC編のCASアルゴリズム(三)
  • CASアルゴリズム
  • コードシミュレーションCASアルゴリズム
  • CASアルゴリズム
    1、CAS(Compre-And-Swap)は、複数のプロセッサの操作に対して設計されたプロセッサの中の特殊命令であり、データを共有する同時アクセス2、CASを管理するために、ロックなしのブロックなしのアルゴリズムの実現である.3、CASは3つの操作数を含んでいますが、読み書きが必要なメモリ値Vを比較したい値Aに書き込んだ新しい値B 4と、Vの値がAに等しい場合、CASの庭方式は新しい値BでVの値を更新します.そうでなければ、何の操作も行われません.5、コア方法ブックlean compreAndSwap(expectValue、udateValue)6、単一変数類:AtomicBoolean、AtomicInteger、AtomicReference、AtomicLong;配列変数類:AtomicIntegerAray、AtomicLongAray、AtomicRefence Aray
    コードシミュレーションCASアルゴリズム
    //オブジェクトを作成し、オブジェクトの1つのint変数をアルゴリズム化します.10スレッドを作成してアナログ操作CASアルゴリズムを実行します.CASアルゴリズムはハードウェアの同時サポートです.ここではSynchronizedを使ってサポートします.コードを付ける
    public class TestCompareAndSwap{
    	CompareAndSwapDemo compareAndSwapDemo = new CompareAndSwapDemo();
    	for(int i=0;i<=9;i++){
    		new Thread(new Runnable{
    			@Override4
    			private void run(){
    				//     
    				int expectValue = compareAndSwapDemo.get();
    				boolean b = compareAndSwapDemo.compareAndSwapSet(expectValue,((int)Math.random)*100);
    				System.out.println(b);
    			}
    		})
    	}
    }
    class CompareAndSwapDemo{
    	private int value;
    	//       
    	public int get(){
    	return value;
    	}
    	//   
    	public synchronized int compareAndSwap(int expectValue,int updateValue){
    		int oldValue = value;
    		if(oldValue == expectValue){
    			value = updateValue;
    		}
    		return oldValue;
    	}
    	//	  
    	public synchronized boolean compareAndSet(int expectValue,int updateValue){
    		return expectValue = compareAndSwap(expectValue,updateValue);
    	}
    }