J.U.C知识点梳理

java.util.concurrent:提供了并发编程的解决方案

  • CAS是java.util.concurrent.atomic包的基础
  • AQS是java.util.concurrent.locks包以及一些常用类比如Semophore,ReentrantLock等类的基础

J.U.C包等分类

  • 线程执行器executor
  • 锁locks
  • 原子变量类atomic
  • 并发工具类tools
  • 并发集合collections
截屏2021-01-30 下午7.57.37

并发工具类

  • 闭锁:CountDownLatch

    • 让主线程等待一组事件发生后继续执行
    • 事件指CountDownLatch里的countDown()方法
    • 截屏2021-01-30 下午8.04.44
    • demo:截屏2021-01-30 下午8.06.27
  • 栅栏:CyclicBarrier

    • 等待其他线程,且会阻塞自己的当前线程,所有线程必须同时到达栅栏位置后,才能继续执行
    • 所有线程到达栅栏处,可以触发执行另一个预先设置的线程
    • 截屏2021-01-30 下午8.09.57
    • demo:截屏2021-01-30 下午8.23.17
  • 信号量:Semaphore

    • 控制某个资源可以被同时访问的线程个数
    • 截屏2021-01-30 下午8.24.47
    • demo:截屏2021-01-30 下午8.25.51
  • 交换器:Exchanger

    • 两个线程到达同步点后,互相交换数据
    • 截屏2021-01-30 下午8.26.35
    • demo:new了只有两个线程的线程池,最后线程数据进行了交换。截屏2021-01-30 下午8.27.12
截屏2021-01-30 下午8.28.53

BlockingQueue:提供可阻塞的入队和出队操作

截屏2021-01-30 下午8.31.11

主要用于生产者-消费者模式,在多线程场景时生产者线程在队列尾部添加元素,而消费者线程则在队列头部消费元素,通过这种方式能够达到将任务的生产和消费进行隔离的目的。

截屏2021-01-30 下午8.36.40