(32)21.3.4 原子类---Java编程思想之并发笔记

时间:2022-06-11 18:01:17
1.原子类     Java SE5引入的特殊原子类:AutomaticInteger、AtomicLong、AtomicReference等特殊的原子性变量类,它们提供了下面形式的原子性条件更新操作:        boolean compareAndSet(expectedValue, updateValue);      这些原子类在进行性能调优的时候很有用处。package jiangning;
import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerTest implements Runnable {
       private AtomicInteger i = new  AtomicInteger(0);       public int getValue(){             return i .get();      }       public void evenIncrement(){             i.addAndGet(2);      }       public void run() {             while(true ){                  evenIncrement();            }      }
       public static void main(String[] args) {             new Timer().schedule(new TimerTask(){                   public void run(){                        System. out.println("Aborting" );                        System. exit(0);                  }            },5000);            ExecutorService exec = Executors. newCachedThreadPool();            AtomicIntegerTest ait = new AtomicIntegerTest();            exec.execute(ait);             while(true ){                   int val = ait.getValue();                   if(val % 2 != 0 ){                        System. out.println(val);                        System. exit(0);                  }            }      }}/**Aborting*/    因为程序不会失败所以添加了Timer,以便程序在5秒钟后自动地终止。package jiangning.c21;
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicEvenGenerator extends IntGenerator{       private AtomicInteger currentEvenValue = new AtomicInteger(0);       public int next(){             return currentEvenValue .addAndGet(2);      }       public static void main(String[] args) {            EvenChecker. test(new AtomicEvenGenerator());      }}/** * myeclipse中执行后死机了,原因是没有出现奇数。 * 这个程序如果不想重启机器最好在控制台中进行编译 * 和运行。呵呵,小倒霉! */    Atomic被用来构建java.util.concurrent中的类,一般情况下使用synchronized或者使用Lock。总结:主要讲了在java5中引入了原子类,在一般情况下,不使用原子类,一般情况下使用synchronized或者使用Lock。