JUC中其他常用类

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的线程");
    }
}

 执行结果:

JUC中其他常用类_第1张图片

 

你可能感兴趣的:(并发编程,java,jvm,开发语言)