package Thread.Basic; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jdt.internal.compiler.ast.ThisReference; /* * ç¨ååç±»æ¹è£ ä¹åçAtomictyTestç±»ï¼å¯ä»¥ä¸ç¨synchronizeåvolatileæ¥ä¿è¯æ§è¡çæ£ç¡®æ§ * * ååç±»ï¼è¯¸å¦AtomicInteger AtomicDouble AtomicReference * * Atomicç±»è¢«è®¾è®¡ç¨æ¥æå»ºjava.util.concurrentå ä¸çç±»ï¼åªæå¨ç¹æ®æ åµä¸æå¨èªå·±çç±»ä¸ä½¿ç¨å®ï¼é常ä¾èµéæ¥è§£å³ï¼synchronizeï¼Lockï¼ * * */ public class AtomictyIntegerTest implements Runnable{ private AtomicInteger i=new AtomicInteger(0); public int getValue(){ return i.get(); } public void increment(){ i.addAndGet(2); } @Override public void run() { while(true){ increment(); } } public static void main(String[] args) { //ç¨åºè¿è¡æ¶æ£ç¡®çï¼ç¨ä¸ä¸ªå®æ¶ä»»å¡æ¥æ§å¶5ç§å忢 new Timer().schedule(new TimerTask() { @Override public void run() { System.err.println("Aborting"); System.exit(0); } }, 5000); ExecutorService executorService=Executors.newCachedThreadPool(); AtomictyIntegerTest test=new AtomictyIntegerTest(); executorService.execute(test); while(true){ int val=test.getValue(); System.out.println(val); if(val%2!=0){ System.out.println(val); System.exit(0); } } } }