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。