使用循环CAS实现原子操作
- 通过自旋CAS实现原子操作
import java.util.concurrent.atomic.AtomicInteger;
/**
-
Created with IntelliJ IDEA.
-
Description: If you don’t work hard, you will a loser.
-
User: Listen-Y.
-
Date: 2020-10-12
-
Time: 21:39
*/
public class Demo {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
//执行的任务
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
//执行一个不安全的和一次安全的
counter.safe();
counter.unSafe();
}
}
};
//创建多线程执行环境
Thread[] threads = new Thread[100];
for (int i = 0; i < 100; i++) {
threads[i] = new Thread(runnable);
}
for (int i = 0; i < 100; i++) {
threads[i].start();
}
for (int i = 0; i < 100; i++) {
threads[i].join();
}
//输出执行结果
System.out.println("安全的 " + counter.getAtomicInteger());
System.out.println("不安全的 " + counter.getCount());
}
}
class Counter {
private AtomicInteger atomicInteger = new AtomicInteger(0);
private int count = 0;
//使用自旋CAS实现安全计数
public void safe() {
while (true) {
int num = atomicInteger.get();
//compareAndSet就是CAS操作
//原理就是比较和交换 首先比较此时的num和内存中的num 如果一样将++num写入返回true
// 如果不一样就不写入返回false
boolean b = atomicInteger.compareAndSet(num, ++num);
if (b) {
break;
}
}
}
//不安全的++
public void unSafe() {
count++;
}
public AtomicInteger getAtomicInteger() {
return atomicInteger;
}
public int getCount() {
return count;
}
}
- 从Java 1.5开始, JDK的并发包里提供了一些类来支持原子操作,如AtomicBoolean(用原子方式更新的boolean值)、AtomicInteger( 用原子方式更新的int值)和AtomicLong(用原子方式更新的long值)。这些原子包装类还提供了有用的工具方法,比如以原子的方式将当前值自增1和自减1。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!