1. 多线程操作共享数据时, 会出问题, 那么就可以使用 java.util.concurrent.Atomic 类定义共享数据, 这个工具包保证类中的数据都具有原子性.
具体实例如下:
- package com.atguigu.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 包含了三个操作数:
- * 1内存值 V
- * 2预估值 A
- * 3更新值 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 volatile int serialNumber = 0;
- private AtomicInteger serialNumber = new AtomicInteger(0);
- @Override
- public void run() {
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- }
- System.out.println(getSerialNumber());
- }
- public int getSerialNumber(){
- return serialNumber.getAndIncrement();
- }
- }
- View Code
- JUC
来源: http://www.bubuko.com/infodetail-2974299.html