hjr-JAVA java.util.concurrent

tools

一些多线程场景用到的工具

  1. CountDownLatch (倒计时器):一个线程等待倒计时数目个线程都执行完毕后在一起做一件事,只能使用一次
    如 如计算10个人12个月内的工资详细然后计算一共交多少税,可以将线程分为11个,10个线程分别计算每个人的工资,计算后,再在主线程里把所有人工资统一计算交税,得出最后结果。
  2. CyclicBarrier(线程栅栏) :多个线程在栅栏处互相等待,最后都准备好再一起操作,可重复使用
    如计算10个人12个月内的工资详细,可以将线程分为10个,分别计算每个人的工资,最后,再用barrierAction将这些线程的计算结果进行整合,得出最后结果。

CountDownLatch强调一个线程等多个线程完成某件事情。CyclicBarrier是多个线程互等,等大家都完成

  1. Exchanger(交换器): 两个格子,两个线程各有一个格子,两个线程分别放数据,两个格子自动交换位置
    如线程间需要通信的地方都用的到
  2. Semaphore(信号量): 有三个功能,主要是控制同时进行的线程数量
  • 某一个界面需要同时发多个请求,全部请求都成功后再一起刷新界面 异步任务 同步返回
  • 多个请求必须按照一定顺序执行 加锁
  • 控制线程开启的数量

Lock

1.lock

Lock接口提供了一些加锁解锁操作

2.ReadWriteLock

读写锁分为读锁和写锁

  • Read Lock – 没有线程获得写锁且没有获取写锁的请求,多个线程可以获得读锁
  • Write Lock – 如果没有线程读或者写,只有一个线程可以获取写锁

collections

1、BlockingQueue
2、ArrayBlockingQueue
3、DelayQueue
4、LinkedBlockingQueue
5、PriorityBlockingQueue
6、SynchronousQueue
7、BlockingDeque
8、LinkedBlockingDeque
9、ConcurrentMap
10、ConcurrentNavigableMap

以上的各种队列可以在想使用队列这种数据结构时使用,此处提供的工具类可以实现线程安全的作用

executor

1、ExecutorService
2、ThreadPoolExecutor
3、ScheduledExecutorService

线程池是使用多线程时必定使用的工具,因为手动频繁创建和切换线程会浪费资源和时间,而设置好各种参数(如最大线程数核心线程数等),然后统一传入到线程池,由线程池去管理各个线程,可以避免这一问题

atomic

1、AtomicBoolean
2、AtomicInteger
3、AtomicLong
4、AtomicReference
5、AtomicStampedReference
6、AtomicIntegerArray
7、AtomicLongArray
8、AtomicReferenceArray

以上的数据类型都是基本数据类型的原子操作数据类型,在想使用哪种类型的时候直接换成原子类型即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章