深入研究JDK并发集合类-Collections.synchronizedXXX

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上进行锁同步。

猜你喜欢

转载自blog.csdn.net/lan861698789/article/details/81323672
今日推荐