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使用场景相关推荐

  1. 高并发编程之AtomicReference使用场景

    Java并发--AtomicReferencen,解决并发时修改多个属性 记录一下工作中,mycat主从延迟,缓存数据有误解决方案 一.AtomicReference介绍 1-AtomicRefere ...

  2. java 高并发_Java 高并发之无锁(CAS)

    Java 高并发之无锁(CAS) 本篇主要讲 Java中的无锁 CAS ,无锁 顾名思义就是 以不上锁的方式解决并发问题,而不使用synchronized 和 lock 等.. 1. Atomic 包 ...

  3. 为什么要有 AtomicReference ?

    我们之前了解过了 AtomicInteger.AtomicLong.AtomicBoolean 等原子性工具类,下面我们继续了解一下位于 java.util.concurrent.atomic 包下的 ...

  4. **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...

    推荐阅读: 数据库面试4连问:分库分表,中间件,优缺点,如何拆分? 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够? 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗? 01 乐观锁 ...

  5. java intbyreference_java并发包(1)-AtomicReference和AtomicStampedReference

    AtomicReference原子应用类,可以保证你在修改对象引用时的线程安全性,比较时可以按照偏移量进行 这里的cas操作本身是原子的,但是在某些场景下会出现异常场景 线程判断被修改对象是否可以正确 ...

  6. java原子类场景,CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题...

    CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题(1)CAS是什么? 比较并交换 举例1,  CAS产生场景代码? importjava.util.concurrent ...

  7. AtomicReference 原子引用

    原创 2016年03月04日 13:35:20 7638 1.简介 赋值操作不是线程安全的.若想不用锁来实现,可以用AtomicReference<V>这个类,实现对象引用的原子更新. 使 ...

  8. 谈谈有什么方法可以快捷实现多场景下的线程安全

    本文分享自华为云社区<如何只用5招实现多线程场景下的线程安全?>,作者: Java小叮当. 1.引言 当前随着计算机硬件的快速发展,个人电脑上的 CPU 也是多核的,现在普遍的 CUP 核 ...

  9. 5招教你实现多线程场景下的线程安全!

    摘要:多线程(并发)场景下,如何编写线程安全(Thread-Safety)的程序,对于程序的正确和稳定运行有重要的意义.下面将结合示例,谈谈如何在Java语言中,实现线程安全的程序. 本文分享自华为云 ...

  10. Java多线程学习总结(5)——乐观锁和悲观锁的基本概念、实现方式(含实例)、适用场景及常见面试题

     分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.基本概念 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题. 乐观锁 ...

最新文章

  1. linux系统创建lvm卷,LVM逻辑卷创建管理
  2. [转载]SSH框架搭建详细图文教程
  3. iMeta期刊纸质版开始免费订阅(包邮)——第一期创刊收藏版
  4. 批量修改mp3文件的title等
  5. ubuntu怎么清空回收站?(权限不够)
  6. k8s安装prometheus(sealos)解决grafana连接prometheus报错的问题:HTTP Error Bad Gateway
  7. 程序内存一直在泄漏,原来是异步死循环了 !
  8. 基于visual Studio2013解决算法导论之019栈实现(基于数组)
  9. php中echo有哪些,php中echo和print有什么区别
  10. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
  11. VisualBrush
  12. VIP客户服务系统设计(外传)——面对变化的“世界”
  13. Antenna Placement(二分图的最大匹配)
  14. Linux学习一概述和环境搭建(入门概述,环境搭建,走近Linux系统)
  15. 安卓手机内存满了,4个方法教你释放空间
  16. 华为、海尔之后,阿里在全屋智能领域有新动作,这次牵手的是萤石
  17. Kubernetes原生api部署微服务5-监听Pod
  18. 【力扣】77. 组合
  19. Fortify扫描漏洞解决方案
  20. Ubuntu一次更改用户组后,qv2ray不能运行的修复

热门文章

  1. 2019--Target Speaker Extraction for Multi-Talker Speaker Verification
  2. 电脑如何恢复已删除文件 如何恢复被删除的数据
  3. Java JUI打字小游戏项目
  4. 查看计算机80端口,电脑技巧分享:检测和解决80端口被占用的2种方法
  5. 第七章 文本数据-学习笔记+练习题
  6. Automated SQL Injection Detection
  7. unity交通仿真_自动驾驶仿真该怎么玩
  8. python藏头诗生成器_藏头诗生成器
  9. 思科本周发布一季财报:利润或继续下滑
  10. 携手业内专家赋能AI时代--EpiK铭识协议发起开源知识运动