面试
code1997
这个作者很懒,什么都没留下…
展开
-
4.ArrayList线程不安全?编写代码证明
写一个ArrayList线程不安全的案例? 1 线程不安全的ArrayList现象: public static void listUnsafe() { //ArrayList存在线程安全的问题 // List<String> list =new ArrayList<>(); //解决方式1:使用vector List<String> list= new CopyOnWriteArrayList<>(); list.fo原创 2020-11-05 19:57:20 · 194 阅读 · 0 评论 -
3.CAS引起的ABA问题以及原子引用
ABA以及原子更新引用 1 什么是ABA? 一句话:狸猫换太子。 详情:假如存在两个线程t1,t2,他们都将物理内存中的数据A复制到自己的工作内存中,t1的任务执行时间比较长,t2的执行时间短,t2将A改为B,然后又改回A,此时走人,t1回来之后发现符合CAS规则,然后将其修改为新的值==>尽管线程t1的cas操作成功,但是不代表这个过程就是没有问题的。 cas认为头和尾一致的时候,资源就没有被修改,过程是否修改是未知的,如果过程也不能被修改,就会出现问题。 解决方式:原子引用+时间戳。原创 2020-11-04 10:11:00 · 143 阅读 · 0 评论 -
2.cas的简单了解
CAS你知道吗 1 什么是CAS? CompareAndSweep,比较并交换。 规则:如果期望值和主物理内存的值一致,则修改成功;不一致则修改失败。 2 请代码演示CAS CASDemo:借助于原子类AtomicInteger package com.at.cas; import java.util.concurrent.atomic.AtomicInteger; /** * @author : code1997 * @date :2020/9/9 22:52 * */ public原创 2020-11-04 09:51:05 · 119 阅读 · 0 评论 -
谈一谈你对volatile的理解
谈谈你对volatile的理解 1 什么是volatile 首先volatile是Java虚拟机提供的轻量级的同步机制,相当于于一个轻量级的锁,其有如下的特点: 保证可见性 不保证原子性 保证有序性–禁止指令重排 2 volatile特点的解析 2.1 可见性 说起可见性,我们就需要了解到一个概念:JMM模型 1 为什么存在JMM? 在早期,计算机的cpu的计算速度和内存的存取速度是差不多,但是到了现在cpu的运算速度高于内存的存取速度好几个数量级,因此为了整体的运行速率,我们不得不加上一层原创 2020-09-21 15:46:16 · 326 阅读 · 0 评论