ArrayList | LinkedList | vector | CopyOnWriteArrayList | Collections.synchronizedList |
---|---|---|---|---|
Object数组,用transient修饰,防止序列化 | 双向链表 | 动态数组,用volatile transient修饰,保证写后读立即可见 | 数组 | |
重写readObject和writeObject方法,提高传输效率 | 根据index决定从头还是从尾开始遍历 | 内部只有一个ReentrantLock锁,增删改时都会加锁,保证写时只有一个线程在进行 | ||
不安全 | 不安全 | 使用synchronized,所有方法都加锁,安全 | 安全 | 安全 |
初始容量10 | 初始容量 0 | 初始容量0 | ||
扩容0.5倍,若还不够,扩大到正好填满为止,将旧数据拷贝到新数组中 | 容量满后自动扩容1倍,将旧数据拷贝到新数组中 | 无锁并发读,写时先上锁,保证不copy过多副本,再对数组副本操作,覆盖原数组;读取无竞争,修改时访问的依然是原数组内容,性能比vector高 | 并发写性能高,与CopyOnWriteArrayList代替vector |
把变量从内存中变成可存储或传输的过程称之为序列化。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化。
transient的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略。有实现可见性和实现有序性。