1.CopyOnWriteArrayList
ArrayList是线程不安全的,Vector是线程安全的(方法被Synchronized修饰),CopyOnWriterArrayList是在Vector的基础上再做优化,因为当读取操作较多时,Vector的效率不高。CopyOnWriterArrayList中读操作并没有加锁,更变态的是其读写操作也互不影响,只有写入和写入之间需要同步等待。
在写操作时,CopyOnWriteArrayList会将原有数据进行一份拷贝到副本中,在副本中进行修改操作,之后替换掉原来的数据即可,所以在这个过程中并不影响读操作。
2.CopyOnWriteArraySet
CopyOnWriteArraySet的实现是基于CopyOnWriteArrayList,其中有自己的一套规则来判断重复数据来达到去重的效果。
3.辅助类CountDownLatch
CountDownLatch允许一个线程在其他的线程执行完之后在执行,其内部的实现是AQS,设置其state的值,其他线程执行完一个,state减1,等到state为0时,等待的线程才会正常执行。
public class Test {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(6); //state=6
for(int i = 0;i<6;i++){
new Thread(()->{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("aaaa");
countDownLatch.countDown(); //相当于state-1
}).start();
}
countDownLatch.await();
System.out.println("main的线程");
}
}
执行结果: