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();}}}
阅读全文
0 0
- AtomicInteger 理解
- AtomicInteger理解和使用
- 对 AtomicInteger 源码 的理解
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- AtomicInteger
- HDU_6153 A Secret【扩展KMP】
- CentOS6.5环境下MySQL编译安装
- github项目托管
- 模型融合
- 公钥证书编码解读
- AtomicInteger 理解
- go语言入门(流程控制,函数,错误处理)
- mybatis多参传递方式(三种)
- C/C++将控制台信息输出到文本
- Windows操作系统下安装IIS、组件及IIS创建网站流程
- AngularJs表单验证+仿某Q注册界面
- 如何使用ssh_scan远程验证SSH服务的配置和策略
- Mybatis多表查询
- 欢迎使用CSDN-markdown编辑器