ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。 1.ArrayList简介ArrayList 是基于数组实现的,所以支持快速随机访问。数组的默认大小为 10。每次扩容1.5 倍,扩容操作需要调用 Arrays.copyOf() 把原数组整个复制到新数组中,这个操作代价很高。Vector出现在JDK1.0是线程安全的,ArrayList出现在JDK1.2是线程不安全的,因为Vector的操作使用了synchronized,保证了数据一致性但并发性 2020-11-16 面试题 Java面试题 ArrayList 集合类不安全问题
原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗? CAS —> UnSafe —> CAS底层思想 —> ABA —> 原子引用更新 —> 如何规避ABA问题 1.ABA问题是怎么产生的CAS会导致“ABA”。狸猫换太子CAS算法实现一个重要前提需要提取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差内会导致数据的变化。比如说一个线程t1从内存地址V中取出A,这时候另一个线程t2也从内存中取出A,并且线程 2020-11-15 面试题 Java面试题 ABA 乐观锁
CAS你知道吗? CAS 代码演示CAS: 比较并交换,需要用到 JUC 的 Atomic 包下面的类来进行操作。 public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(5); // main thread do thing... // 两个参数:int 2020-11-10 面试题 Java面试题 CAS UnSafe
请谈谈你对volatile的理解 volatile是java虚拟机提供的轻量级的同步机制 保证可见性 不保证原子性 禁止命令重排首先我们要懂得:JVM是java虚拟机、JMM是java内存模型。JMM(java内存模型Java Memory Model,简称JMM)本身是一个抽象的概念并不真是存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。 JMM关于同步 2020-11-03 面试题 Java面试题 JMM volatile