JDK原子类操作及原理

在JDK5之后,JDK提供了对变量的原子类操作,

java.util.concurrent.atomic里都是原子类

原子类的分类

  • 原子更新基本类型
  • 原子更新数组
  • 原子更新抽象类型
  • 原子更新字段

原子基本类型

package JavaCore.MultiThread.advanced.AtomicClass;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicIntegerArray;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReference; /*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: ThreadOfSynchronized
* @Author: liufei32@outlook.com
* @Date: 2019/3/5 9:56
* @Description: 不使用synchronized,而使用原子类实现保证线程安全性操作
* @Aha-eureka:
*******************************************************************************/ public class ThreadOfSynchronized_Atomic { //基本类型
private AtomicInteger value = new AtomicInteger(); //数组
private int[] ints = {1, 2, 4, 8, 16};
AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(ints); //抽象类型,抽象类型的字段必须使用volatile来修饰,不然会运行报错
User user = new User();
AtomicReference<User> userAtomicReference = new AtomicReference<>();
//然后使用AtomicIntegerFieldUpdater更新字段
AtomicIntegerFieldUpdater userUpdate = AtomicIntegerFieldUpdater.newUpdater(User.class, "age"); public int getNextValue() {
userUpdate.getAndIncrement(user);
System.out.println(user.age);
return value.getAndIncrement();
} public static void main( String[] args ) {
ThreadOfSynchronized_Atomic ts = new ThreadOfSynchronized_Atomic(); new Thread(()->{
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println(Thread.currentThread().getName() + " " + ts.getNextValue());
} },"Swagger").start(); new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + ts.getNextValue());
}
}
},"Ranger").start();
}
}

本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger

欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

最新文章

  1. 转 苹果企业级帐号进行ipa打包,分发,下载等流程
  2. Photoshop学习笔记(待续)
  3. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
  4. HTML5实现屏幕手势解锁
  5. 电网SVG简介
  6. 史上最全的phpstorm常用配置
  7. BZOJ 1660: [Usaco2006 Nov]Bad Hair Day 乱发节
  8. php-fpm配置优化
  9. Angular--学习
  10. hibernate操作步骤(代码部分)
  11. 201521123093 JAVA程序设计
  12. Memcached的安装与简单使用
  13. C语言实现printf的基本格式输出%d,%c,%p,%s
  14. Centos7搭建虚拟用户FTP
  15. Create and test an approval workflow with Microsoft Flow
  16. Windows7环境下Excel2010中图片超链接默认打开程序修改
  17. SQL Server2012数据库开启远程连接
  18. 转载 --- SKLearn中预测准确率函数介绍
  19. 华为交换机有关BGP的相关配置
  20. 这里有一篇简单易懂的webSocket 快到碗里来~

热门文章

  1. 从Github上下载了项目,导入Android Studio,gradle 报错,应该怎么修改
  2. 百度API从经纬度坐标到地址的转换服务
  3. Python:元组
  4. 「LuoguP1430」 序列取数(区间dp
  5. MongoDB 2.6复制集单节点部署(三)
  6. MSD3393/MSD3463 屏参及REG对照表
  7. docker容器的参数如何指定配额
  8. $.ajax数据传输成功却执行失败的回调函数
  9. java命令行从编译到打jar包到执行
  10. Fitnesse 访问日志配置