CopyOnWriteArrayList 比 Vector厉害在哪?
为什么经常使用的是CopyOnWriteArrayList
CopyOnWriteArrayList 使用的lock锁的机制
Vector 使用的是synchronized锁
synchronized 和 lock锁的区别
-
synchronized 是java内置的关键字,lock是一个java类
-
synchronized 无法获取锁的状态,lock 可以判断是否获得了锁
-
synchronized 会自动释放锁,lock不会自动释放锁,需要自己手动释放锁,如果不释放锁,会造成死锁
-
synchronized 线程一(获得锁,然后锁阻塞了),线程二(等待,然后还是傻傻的等待),lock锁就不一定会等待下去
-
synchronized 可重入锁,不可以被中断,非公平,lock 可重入锁,可判断锁,是否为公平锁,可以自行设置
-
synchronized 适合少量的代码同步问题,lock适合大量的代码同步问题
Vector 和 CopyOnWriteArrayList
Vector 的曾删改查方法都加上了synchronized锁,保证同步的情况下,因为每个方法都要去获得锁,所以性能就会大大下降。
CopyOnWriteArrayList 方法只是在增删改方法上增加了ReentrantLock锁,但是他的读方法不加锁,所以在读的方面就要比Vector性能要好,CopyOnWriteArrayList适合读多写少的并发情况,读写分离,在写的时候复制出一个新的数组,完成插入、修改、删除操作,在完成操作后,将这个新的数组赋值给一个array。