AtomicInteger 理解

来源:互联网 发布:淘宝网店转让出售 编辑:程序博客网 时间:2024/04/29 12:28

查看连接池源码时看到了AtomicInteger,在多线程为了保存数据的一致性必须通过锁方式实现

AtomicInteger 主要通过 volatile 关键字在多线程中可以保证数据的原子性,但随之效率也会降低

测试用例,直接COPY运行


package com.hhly.sns.commons;import java.util.concurrent.atomic.AtomicInteger;/** * @author wangyl-910 * @description 测试AtomicInteger多线程情况下数据是否异常 * @date 2017/8/19 * @see */public class AtomicIntegerTest {public static void main(String[] args) throws InterruptedException {AtomicInteger atomicInteger = new AtomicInteger();// 两个线程+2,两个线程 -1,结果 2000for (int i = 0; i < 2; i++) {IncrementThread incrementThread = new IncrementThread(atomicInteger);incrementThread.start();DecrementThread decrementThread = new DecrementThread(atomicInteger);decrementThread.start();}Thread.sleep(1000);// 结果等于2000System.out.println(atomicInteger.get());}}/** * +2线程 */class IncrementThread extends Thread {private AtomicInteger atomicInteger;IncrementThread(AtomicInteger atomicInteger) {this.atomicInteger = atomicInteger;}@Overridepublic void run() {// 1000次for (int i = 0; i < 1000; i++) {atomicInteger.addAndGet(2);}}}/** * -1线程 */class DecrementThread extends Thread {private AtomicInteger atomicInteger;DecrementThread(AtomicInteger atomicInteger) {this.atomicInteger = atomicInteger;}@Overridepublic void run() {// 1000次for (int i = 0; i < 1000; i++) {atomicInteger.getAndDecrement();}}}





原创粉丝点击