本文主要是介绍Java基础知识总结(81),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JUC容器
JUC基于非阻塞算法(Lock Free 无锁编程)提供了一组高并发的List、Set、Queue、Map容器。
JUC高并发容器是基于非阻塞算法实现的容器类,无锁编程算法主要通过CAS(Compare And Swap)+volatile的组合实现,通过CAS保障操作的原子性,通过volatile保障变量内存的可见性。
优点:
开销较小,不需要在内核态和用户态之间的
读写不排斥:只有写操作需使用使用CAS机制的乐观锁,读读操作之间可以不用互斥。
Collections.synchronized包装方法能将一个普通的容器包装成一个线程安全的Sorted同步容器。
CopyOnWriteArrayList
不直接在原有内存块上进行写操作,而是将内存复制一份,在新的内存中进行写操作,写完之后,再将原来的指针(或者引用)指向新的内存,原来的内存被回收
和非线程安全的ArrayList很像,其核心方法是,add()、set()、remove()等方法,CopyOnWriteArrayList是线程安全的,由于要操作整个数组,开销比较大,在操作数组的过程中,其数组长度通常保持的很小,不会出现较大的扩容,添加一个元素就新数组长度就增加1,只读操作多于可变操作。
CopyOnWriteArrayList的“动态数组”机制 -- 它内部有个“volatile数组”(array)来保持数据。在“添加/修改/删除”数据时,都会新建一个数组,并将更新后的数据拷贝到新建的数组中,最后再将该数组赋值给“volatile数组”。这就是它叫做CopyOnWriteArrayList的原因!CopyOnWriteArrayList就是通过这种方式实现的动态数组;不过正由于它在“添加/修改/删除”数据时,都会新建数组,所以涉及到修改数据的操作,CopyOnWriteArrayList效率很 低;但是单单只是进行遍历查找的话,效率比较高。 5.CopyOnWriteArrayList的“线程安全”机制 -- 是通过volatile和监视器锁Synchrnoized来实现的。
这篇关于Java基础知识总结(81)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!