AtomicInteger原子雷类型自增

Posted tian-bao555

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtomicInteger原子雷类型自增相关的知识,希望对你有一定的参考价值。

AtomicInteger原子操作类型:

 

private static Integer num = 0; 对num++得到结果19055

 

private static volatile Integer num = 0; 对num++得到结果19550

 

此时引入java并发包下的AtomicInteger类,利用其原子操作实现高并发问题解决:

public class MyAtomicInteger { private static final Integer threadCount = 20;

private static AtomicInteger count = new AtomicInteger(0); private static void increase() { count.incrementAndGet(); }

public static void main(String[] args) { Thread[] threads = new Thread[threadCount]; for (int i = 0; i < threadCount; i++) { threads[i] = new Thread(() -> { for (int i1 = 0; i1 < 1000; i1++) { increase(); } }); threads[i].start(); }

while (Thread.activeCount() > 1) {

// 意思就是调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。// 但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。// 注意调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的 Thread.yield(); } System.out.println(Thread.currentThread().getName()); System.out.println("num:" + count); }}

结果:

main

num:40000

以上是关于AtomicInteger原子雷类型自增的主要内容,如果未能解决你的问题,请参考以下文章

使用AtomicInteger原子类代替i++线程安全操作

Java高级特性系列--Concurrent

java笔记java中的AtomicInteger原子操作类

原子变量与CAS算法

JUC并发编程 -- 原子整数(AtomicInteger)& 原子引用 (介绍 & ABA问题 & AtomicStampedReference & AtomicMa

JAVA中如何保证线程安全以及主键自增有序