首页 > 代码库 > 基于CAS线程安全的计算方法 java并发编程的艺术上的一个案例
基于CAS线程安全的计算方法 java并发编程的艺术上的一个案例
package thread; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * @author changxiangxiang * @date 2014年8月6日 下午3:25:12 * @description * @since sprint2 */ public class Counter { private AtomicInteger atomicI = new AtomicInteger(); public int i = 0; public static void main(String[] args) { final Counter counter = new Counter(); List<Thread> ts = new ArrayList<Thread>(); long start = System.currentTimeMillis(); for (int j = 0; j < 100; j++) { Thread t = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10000; i++) { counter.count(); counter.sateCount(); } } }); ts.add(t); } for (Thread tr : ts) { tr.start(); } // 等待所有线程执行完成 for (Thread tr : ts) { try { tr.join(); } catch (Exception e) { e.printStackTrace(); } } System.out.println(counter.i); System.out.println(counter.atomicI.get()); System.out.println(System.currentTimeMillis() - start); } private void sateCount() { // atomicI.getAndIncrement(); // 自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止。 for (;;) { int i = atomicI.get(); boolean suc = atomicI.compareAndSet(i, ++i); if (suc) { break; } } } private void count() { i++; } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。