服装网站建设规定,wordpress json 登陆,云南大学做行测的网站,网站开发下人员配置一、Vector和ArrayList、LinkedList联系和区别#xff0c;分别的使用场景
ArrayList#xff1a;底层是数组实现#xff0c;线程不安全#xff0c;查询和修改非常快#xff0c;但是增加和删除慢
LinkedList: 底层是双向链表#xff0c;线程不安全#xff0c;查询和修改…一、Vector和ArrayList、LinkedList联系和区别分别的使用场景
ArrayList底层是数组实现线程不安全查询和修改非常快但是增加和删除慢
LinkedList: 底层是双向链表线程不安全查询和修改速度慢但是增加和删除速度快
Vector: 底层是数组实现线程安全的操作的时候使用synchronized进行加锁
使用场景
Vector已经很少用了增加和删除场景多则用LinkedList查询和修改多则用ArrayList
二、如果需要保证线程安全ArrayList应该怎么做有几种方式
方式一使用Collections.synchronizedListsynchronized加锁
ListString synchronizedList Collections.synchronizedList(new ArrayList());
方式二使用 CopyOnWriteArrayListReentrantLock加锁
ListString cowList new CopyOnWriteArrayList();
三、CopyOnWriteArrayList和 Collections.synchronizedList实现线程安全的区别以及它们的使用场景
CopyOnWriteArrayList执行修改操作时会拷贝一份新的数组进行操作add、set、remove等)在执行完修改后将原来集合指向新的集合来完成修改操作源码里面用ReentrantLock可重入锁来保证不会有多个线程同时拷贝一份数组
使用场景读高性能适用读操作读操作远远大于写操作的场景中使用(因为读的时候是不需要加锁的直接获取删除和增加是需要加锁的, 读多写少)
Collections.synchronizedList线程安全的原因是因为它几乎在每个方法中都使用了synchronized同步锁
使用场景读操作性能并不如CopyOnWriteArrayList因为读操作的时候有加锁
四、CopyOnWriteArrayList的设计思想以及它有什么缺点
设计思想读写分离最终一致读的时候是读旧的数组
缺点内存占用问题,写时复制机制,内存里会同时驻扎两个对象的内存旧的对象和新写入的对象,如果对象大则容易发生Yong GC和Full GC