package com.expgiga.JUC; import java.util.concurrent.atomic.AtomicInteger; /** * 一、i++的原子性,i++的操作,分为三部分:"读-改-写" * int i = 10; * i = i++; //10 * * int temp = i; * i = i + 1; * i = temp; * * 二、原子变量:java.util.concurrent.atomic包下提供了常用的原子变量 * 1.volatile 保证内存可见性 * 2.CAS(Compare-And-Swap)算法保证数据的原子性 * CAS算法是硬件对于并发操作共享数据的支持。 * CAS包含了三个操作数: * 内存值:V * 预估值:A * 更新值:B * 当且仅当V == A, V = B,否则,不做任何操作。 */ public class TestAtomicDemo { public static void main(String[] args) { AtomicDemo ad = new AtomicDemo(); for (int i = 0; i < 10; i++) { new Thread(ad).start(); } } } class AtomicDemo implements Runnable { // private int serialNumber = 0; private AtomicInteger serialNumber = new AtomicInteger(); @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" + getSerialNumber()); } public int getSerialNumber() { return serialNumber.getAndIncrement(); } }
Atomic使用示例
最新推荐文章于 2024-07-30 15:00:10 发布