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