AtomicReference使用场景
1.简介
赋值操作不是线程安全的。若想不用锁来实现,可以用AtomicReference<V>这个类,实现对象引用的原子更新。
使用场景:一个线程使用student对象,另一个线程负责定时读表,更新这个对象。那么就可以用AtomicReference这个类。
package org.luzhen.test;public class Student {private String name;private Integer age;public Student() {}public Student(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}package org.luzhen.test;import java.util.concurrent.atomic.AtomicReference;public class Test
{ public final static AtomicReference<Student> atomicStudent = new AtomicReference<Student>();public static void main(String[] args){final Student student1 = new Student("a",1);final Student student2 = new Student("b",2);//初始值为student1对象atomicStudent.set(student1);for (int i = 0; i < 10; i++){new Thread() {public void run() {try{//为了 使得控制台打印的 更改student1的线程 能显示出不一样 每个线程随机停顿 多执行几次能看出效果Thread.sleep(Math.abs((int)Math.random()*100));}catch (Exception e){e.printStackTrace();}//预期值 student1和 当前值(上面的atomicStudent.set(student1);)相等时候 赋予student2新的值if (atomicStudent.compareAndSet(student1,student2)){System.out.println(Thread.currentThread().getId() + "Change value");System.out.println(atomicStudent.get().getName()+":"+atomicStudent.get().getAge());}else {System.out.println(Thread.currentThread().getId() + "Failed");}};}.start();}}
}
打印结果:执行2次 可以看到 第一次只有线程9 改成功 第二次只有线程8该成功
9Change value
8Failed
11Failed
12Failed
10Failed
9Change value
14Failed
b:2
13Failed
16Failed
15Failed
17FailedProcess finished with exit code 08Change value
12Failed
11Failed
10Failed
9Failed
14Failed
13Failed
b:2
15Failed
16Failed
17FailedProcess finished with exit code 0
二、使用场景
https://www.cnblogs.com/liumy/p/11632878.html
AtomicReference使用场景相关推荐
- 高并发编程之AtomicReference使用场景
Java并发--AtomicReferencen,解决并发时修改多个属性 记录一下工作中,mycat主从延迟,缓存数据有误解决方案 一.AtomicReference介绍 1-AtomicRefere ...
- java 高并发_Java 高并发之无锁(CAS)
Java 高并发之无锁(CAS) 本篇主要讲 Java中的无锁 CAS ,无锁 顾名思义就是 以不上锁的方式解决并发问题,而不使用synchronized 和 lock 等.. 1. Atomic 包 ...
- 为什么要有 AtomicReference ?
我们之前了解过了 AtomicInteger.AtomicLong.AtomicBoolean 等原子性工具类,下面我们继续了解一下位于 java.util.concurrent.atomic 包下的 ...
- **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...
推荐阅读: 数据库面试4连问:分库分表,中间件,优缺点,如何拆分? 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够? 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗? 01 乐观锁 ...
- java intbyreference_java并发包(1)-AtomicReference和AtomicStampedReference
AtomicReference原子应用类,可以保证你在修改对象引用时的线程安全性,比较时可以按照偏移量进行 这里的cas操作本身是原子的,但是在某些场景下会出现异常场景 线程判断被修改对象是否可以正确 ...
- java原子类场景,CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题...
CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题(1)CAS是什么? 比较并交换 举例1, CAS产生场景代码? importjava.util.concurrent ...
- AtomicReference 原子引用
原创 2016年03月04日 13:35:20 7638 1.简介 赋值操作不是线程安全的.若想不用锁来实现,可以用AtomicReference<V>这个类,实现对象引用的原子更新. 使 ...
- 谈谈有什么方法可以快捷实现多场景下的线程安全
本文分享自华为云社区<如何只用5招实现多线程场景下的线程安全?>,作者: Java小叮当. 1.引言 当前随着计算机硬件的快速发展,个人电脑上的 CPU 也是多核的,现在普遍的 CUP 核 ...
- 5招教你实现多线程场景下的线程安全!
摘要:多线程(并发)场景下,如何编写线程安全(Thread-Safety)的程序,对于程序的正确和稳定运行有重要的意义.下面将结合示例,谈谈如何在Java语言中,实现线程安全的程序. 本文分享自华为云 ...
- Java多线程学习总结(5)——乐观锁和悲观锁的基本概念、实现方式(含实例)、适用场景及常见面试题
分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.基本概念 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题. 乐观锁 ...
最新文章
- linux系统创建lvm卷,LVM逻辑卷创建管理
- [转载]SSH框架搭建详细图文教程
- iMeta期刊纸质版开始免费订阅(包邮)——第一期创刊收藏版
- 批量修改mp3文件的title等
- ubuntu怎么清空回收站?(权限不够)
- k8s安装prometheus(sealos)解决grafana连接prometheus报错的问题:HTTP Error Bad Gateway
- 程序内存一直在泄漏,原来是异步死循环了 !
- 基于visual Studio2013解决算法导论之019栈实现(基于数组)
- php中echo有哪些,php中echo和print有什么区别
- oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
- VisualBrush
- VIP客户服务系统设计(外传)——面对变化的“世界”
- Antenna Placement(二分图的最大匹配)
- Linux学习一概述和环境搭建(入门概述,环境搭建,走近Linux系统)
- 安卓手机内存满了,4个方法教你释放空间
- 华为、海尔之后,阿里在全屋智能领域有新动作,这次牵手的是萤石
- Kubernetes原生api部署微服务5-监听Pod
- 【力扣】77. 组合
- Fortify扫描漏洞解决方案
- Ubuntu一次更改用户组后,qv2ray不能运行的修复
热门文章
- 2019--Target Speaker Extraction for Multi-Talker Speaker Verification
- 电脑如何恢复已删除文件 如何恢复被删除的数据
- Java JUI打字小游戏项目
- 查看计算机80端口,电脑技巧分享:检测和解决80端口被占用的2种方法
- 第七章 文本数据-学习笔记+练习题
- Automated SQL Injection Detection
- unity交通仿真_自动驾驶仿真该怎么玩
- python藏头诗生成器_藏头诗生成器
- 思科本周发布一季财报:利润或继续下滑
- 携手业内专家赋能AI时代--EpiK铭识协议发起开源知识运动