ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtomicInteger原子雷类型自增

2020-01-01 10:52:09  阅读:305  来源: 互联网

标签:自增 Thread AtomicInteger 原子 num static yield 线程 CPU


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

标签:自增,Thread,AtomicInteger,原子,num,static,yield,线程,CPU
来源: https://www.cnblogs.com/tian-Bao555/p/12128433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有