线程安全系列面试问题进阶

Volatile是什么轻量级的同步机制:可见性,不保证原子性,禁止指令重排
JVM JMM:Java内存模型 可见性 原子性 有序性

ArrayList线程不安全:报错异常:java.util.ConcurrentModficationException
导致原因:并发争抢修改导致。
解决方案:1.new Vector<>() 加了同步锁 但是降低并发性
2.Collections.synchronizedList(new ArrayList<>())
3.CopyOnWriteArrayList<>() 写时复制:CopyOnWrite是写时复制一个容器,将新元素添加到复制的容器中,再将元容器的引用指向新复制的容器

HashSet线程不安全:同上:
解决方案:Collections.synchronizedSet(new HashSet)
CopyOnWriteHashSet<>()
HashMap线程不安全:解决方案:Collections.synchronizedMapt(new HashMap)
ConcurrentHashMap<>()

CountDownLatch:让一些线程阻塞知道另一些线程完成后再被唤醒。
当一个线程调用await()方法时,调用的线程会被阻塞,其他线程调用CountDown:方法会将计数器减一,并且此线程不会被阻塞,当计数器值变为0时,调用await()方法的线程会被唤醒,继续执行。
CyclicBarrier:将一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障才会开门,所有被阻塞的线程才能继续干活,线程进入屏障通过CyclicBarrier的await()方法
Semphore:信号量主要用于两个:1多个共享资源互斥使用 2并发线程数的控制

你可能感兴趣的:(面试,分布式,多线程)