Java-线程安全的计数器
synchronized和volatile关键字的区别:
(1)synchronized关键字保证了多个线程对于同步块是互斥的,synchronized作为一种同步手段,解决java多线程的执行有序性和内存可见性,而volatile关键字只解决多线程的内存可见性问题;(2)volatile关键字是java提供的一种同步手段,只不过它是轻量级。volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性。而最彻底的同步要保证有序性和可见性,例如synchronized。任何被volatile修饰的变量,都不拷贝副本到工作内存,任何修改都及时写在主存。因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的。
AtomicInteger介绍
AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。
AtomicInteger使用场景
AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下的使用。
public class Test2 {
public static AtomicInteger count = new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {for (int i = 0; i < 100; i++) {new Thread() {public void run() {for (int j = 0; j < 100; j++) {count.getAndIncrement();}}}.start();}Thread.sleep(1000);System.out.println("AtomicInteger count: " + count);
}
}
原子更新基本类型
atomic包下提供了AtomicBoolean/AtomicLong/AtomicInteger三个原子更新基本类型,以AtomicInteger为例,其他两种基本类似。以下是AtomicInteger囊括的大致方法
public final int getAndSet(int newValue) //给AtomicInteger设置newValue并返回加oldValue
public final boolean compareAndSet(int expect, int update) //如果输入的值和期望值相等就set并返回true/false
public final int getAndIncrement() //对AtomicInteger原子的加1并返回当前自增前的value
public final int getAndDecrement() //对AtomicInteger原子的减1并返回自减之前的的value
public final int getAndAdd(int delta) //对AtomicInteger原子的加上delta值并返加之前的value
public final int incrementAndGet() //对AtomicInteger原子的加1并返回加1后的值
public final int decrementAndGet() //对AtomicInteger原子的减1并返回减1后的值
public final int addAndGet(int delta) //给AtomicInteger原子的加上指定的delta值并返回加后的值
作者:放学等我别走
来源:CSDN
原文:https://blog.csdn.net/weixin_40760196/article/details/82216173
版权声明:本文为博主原创文章,转载请附上博文链接!
Java-线程安全的计数器相关推荐
- Java线程安全的计数器
synchronized和volatile关键字的区别: (1)synchronized关键字保证了多个线程对于同步块是互斥的,synchronized作为一种同步手段,解决java多线程的执行有序性 ...
- Java线程安全计数器
三种方式实现计数器 1.简介说明 1.简介说明 这篇博客主要记录下Java在多线程情况下,集中线程安全的计数器的一个实现.主要使用了三种不同的方式实现. synchronized方式,排它锁.独占锁. ...
- 2017年50道Java线程面试题
下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编 ...
- Java线程面试题 Top 50(转)
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程 ...
- 【多线程】Java线程面试题 Top 50(转载)
Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入 ...
- Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析
1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...
- Java线程详解(14)-信号量
Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等, ...
- Java线程详解(10)-volatile关键字
Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volatile 变量所需的编码较少,并 ...
- Java线程新特征——Java并发库
一.线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...
- Java线程面试题 Top 50
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 不管你是新程序员还是老手,你一定在面试 ...
最新文章
- python一年365天、初始水平值_2020年11月7日,20201107
- hdu 5419(数学期望)
- 巡逻机器人用应用的pc端车牌识别
- java scanner转string,Java InputStream to String 转化
- Java比较器之Comparable接口与Comparator接口的使用
- Flutter中使用友盟统计
- jgGrid常用操作--持续更新
- 【C++】R进制转10进制,10进制转R进制
- bmfont-instructions
- vs vsvim viemu vax 备忘
- 如何将硬盘系统完整拷贝到另一硬盘?
- 计量模型 | 固定效应与交互固定效应
- SQLite Expert查看SQLite数据库文件没有数据的问题
- PNG-的IDAT解析
- 2018全美程序员薪资报告新鲜出炉!
- 我国南极泰山站正式建成开站
- [图论]---[网络流]---最小点割数/最小点割集
- 论文解读 X-CLIP : Expanding Language-Image Pretrained Models for General Video Recognition
- 微信小程序实战(一)---实现登录界面
- ISeeYou:一款基于Bash和Javascript开发的社会工程学网络钓鱼工具
热门文章
- Springboot配置SSL(https)
- React Router缓存路由
- 输入大写字母,输出大小写字母及其对应的ASCII码;输入语句,将大写字母变成小写字母;将句子中每个单词的第一个字母转换为大写字母;输入一串字符,分别算出英文字母、空格、数字、其他字符的个数(C)
- 机器学习中神经网络,支持向量机以及贝叶斯分类器总结
- leafletjs 热力图_LeaFlet学习之热力图
- 均匀分布的概率密度函数和分布函数学习笔记1
- 前程无忧——爬虫+数据分析
- mysql --- mongodb --- nginx 知识点总结
- 基于QT实现Mp3播放器(理论论述部分)
- 小学知识点~句式全覆盖专题