java线程--无锁CAS(CompareAndSet比较交换)
2018-01-29 00:00
351 查看
无锁线程安全整数
public class Test { static AtomicInteger ai = new AtomicInteger(0); static class MyTask implements Runnable { @Override public void run() { for(int i=0;i<10000;i++){ ai.incrementAndGet(); } } } public static void main(String[] args) throws InterruptedException, ExecutionException { MyTask t =new MyTask(); //在线程池执行代码,最终未能得到正确答案 // ExecutorService exs = Executors.newFixedThreadPool(10); // for(int i=0;i<10;i++){ // exs.execute(t); // } // // exs.shutdown(); // System.out.println(ai); Thread[] ths = new Thread[10]; for(int i =0;i<10;i++){ ths[i] = new Thread(t); } for(int i =0;i<10;i++){ ths[i].start(); } for(int i =0;i<10;i++){ ths[i].join(); } System.out.println(ai); } }
内部实现
public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return next; } } public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this, valueOffset, expect, update); }
AtomicReference<T> AtomicStampedReference<T>的理解
相关文章推荐
- Java中的CompareAndSet(CAS)
- Java中的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java CAS(Compare And Swap)的一点理解
- java Atomic compareAndSet部分原理分析
- 理解java.util.concurrent.atomic中的compareAndSet
- Java中的CAS(Compare And Swap)
- Java下CAS(Compare And Swap)并发操作测试
- Java并发之CAS:CompareAndSwap
- Java多线程编程学习笔记 synchronized的理解 原子操作 actomic compareAndSet
- java并发 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- CAS(compareAndSet)算法及简单应用AtomicInteger
- 【Java并发编程】9、非阻塞同步算法与CAS(Compare and Swap)无锁算法
- [Java Concurrent Programming] Integrate CAS strategy (Compare-and-Swap) into JDK java.util.conrreut package
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法