Collections下有很多同步方法。
以Collections.synchronizedList来举例说明
源码:
Collections.synchronizedList(new ArrayList<String>());
new SynchronizedList<>(list) 原文:https://blog.csdn.net/lan861698789/article/details/81323672 static class SynchronizedList<E> implements List<E> { private static final long serialVersionUID = -7754090372962971524L; final Object mutex; // Object on which to synchronize final Collection<E> c; // Backing Collection final List<E> list; //......//省略 SynchronizedList(List<E> list) { super(list); this.list = list; } //......//省略
public E get(int index) { synchronized (mutex) { return list.get(index); } } public E set(int index, E element) { synchronized (mutex) { return list.set(index, element); } } public void add(int index, E element) { synchronized (mutex) { list.add(index, element); } } public E remove(int index) { synchronized (mutex) { return list.remove(index); } } }
|
分析:
可以看到它对list做了一次封装,每次的CURD都会在基础list上进行锁同步。