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

原文地址:https://www.cnblogs.com/tian-Bao555/p/12128433.html

时间: 2024-08-02 08:26:28

AtomicInteger原子雷类型自增的相关文章

深入解析Java AtomicInteger 原子类型

深入解析Java AtomicInteger原子类型 在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是实现线程安全.线程安全的定义如下: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的. 举个线程不安全的例子.假如我们想实现一个功能来统计网页访问量,你可能想到用count++ 来统计访问量,但是这个自增操作不是线程安全的.coun

让实体对象自行决定留存操作类型(增删改)

本文中不考虑数据库并发的影响和缓存效率问题. 实体对象的留存指把对象改变保存回数据存储中,就数据库而言就是INSERT.UPDATE.DELETE.1.从数据源加载的实体未发生改变,则不需执行留存操作.2.新建的实体留存时执行INSERT.3.从数据源加载的实体发生了改变,留存时执行UPDATE.4.客户端决定删除某实体时,执行DELETE. 留存操作的决定者1.客户端可以充当留存操作的决定者,在UI层实现,需要客户端根据判断调用不同的增删改方法.不推荐.2.(推荐)实体自身也可以充当留存操作的

AtomicInteger类和int原生类型自增鲜明的对比

AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题.比如说 int i = 0 ; i++; 上面的写法是线程不安全的. 有的人可能会说了,可以使用synchronized关键字啊. 但是这里笔者要说的是,使用了synchronized去做同步的话系统的性能将会大大下降. 所以此时AtomicInteger这个类的使用就可以满足上述的情况. 当我们统计一个页面的浏览量的时候,可以使用该类来统计,而不再使用++运算符. 但是在使用的过程中,笔者发现

Python的列表类型操作——“增删改查”,元组——“查”

一.什么是列表 1.列表是一个可变的数据类型,它由[]表示,其中的每一项元素使用","逗号隔开,可以储存各种数据类型.列表相比于字符串,可以存放大量数据类型,其是有序的,有索引,可以使用切片,方便取值. 2.列表的索引的下表也是从0开始的,切出来的内容为列表.[起始位置:结束位置:步长] 二.列表的"增删改查" 1.增加 list相比于str另一个更为方便的是,list可以发生改变,我们可以直接在原来的对象上进行操作 1)append() 在原字符串的末尾添加一个数

第三课作业——set类型、sorted set类型的增删改查,redis的事务

第三课时作业 静哥 by 2016.2.23~2016.3.6   [作业描述] 1.总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查(查需要至少4种方式,比如列表,单个节点等) 2.总结redis的事务特征,并且实际操作事务的提交  丢弃以及乐观锁 [作业一:总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查] (1) set是字符串的无序集合,集合内的成员可以是重复: sorted set是有序集合

3——字符串类型(增删改查)

字符串 增 查 st.find(字符,StartIndex,EndIndex) # 返回查找到的字符串的索引位置,如果未找到将返回-1 st.count(字符) # 返回查找并统计这个字符串的数量 st.index(字符) # 返回查找的字符串的索引位置,如果未找到将报错,推荐使用str.find st.isdigit() # 判断当前字符串是否由纯数字组成返回True 或 False st.isalpha() # 判断当前字符串是否由纯字符组成 返回True 或 False st.islowe

2——列表类型(增删改查)

列表(list) 增 在列表中逗号后面加空格! append()(追加):默认在列表末尾添加元素(id不变): li = [1, 2, 3, 4] >>>li.append(5) >>>li >>>[1, 2, 3, 4, 5] insert()(插入):在索引位置插入: li.insert(0, 'a') #在索引为0的位置插入字符a >>>li >>>['a', 1, 2, 3, 4, 5,] extend()(

python-10:列表类型操作:增删改查

原文地址:https://www.cnblogs.com/Zhouzg-2018/p/9689457.html

AtomicInteger原理&amp;源码分析

转自https://www.cnblogs.com/rever/p/8215743.html 深入解析Java AtomicInteger原子类型 在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是实现线程安全.线程安全的定义如下: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的. 举个线程不安全的例子.假如我们想实现一个功能来统计