阅读JDK8 CopyOnWriteArraySet应该了解什么
1、为什么说该集合是线程安全 final transient ReentrantLock lock = new ReentrantLock(); private transient volatile Object[] array; public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len + 1); newElements[len] = e; setArray(newElements); return true; } finally { lock.unlock(); } } 该集合中add,set通过ReentrantLock实现同步,volatile定义的变量在线程间可见的。 2、为什么不适用synchronized synchronized和ReentrantLock的作用是相同的,但ReentrantLock提供更丰富的特性,比如:定时锁等待,可中断锁,锁投票等,性能更优一些。ReentrantLock提供了可轮询的锁请求,他可以尝试的去取得锁