tools
一些多线程场景用到的工具
- CountDownLatch (倒计时器):一个线程等待倒计时数目个线程都执行完毕后在一起做一件事,只能使用一次
如 如计算10个人12个月内的工资详细然后计算一共交多少税,可以将线程分为11个,10个线程分别计算每个人的工资,计算后,再在主线程里把所有人工资统一计算交税,得出最后结果。 - CyclicBarrier(线程栅栏) :多个线程在栅栏处互相等待,最后都准备好再一起操作,可重复使用
如计算10个人12个月内的工资详细,可以将线程分为10个,分别计算每个人的工资,最后,再用barrierAction将这些线程的计算结果进行整合,得出最后结果。
CountDownLatch强调一个线程等多个线程完成某件事情。CyclicBarrier是多个线程互等,等大家都完成
- Exchanger(交换器): 两个格子,两个线程各有一个格子,两个线程分别放数据,两个格子自动交换位置
如线程间需要通信的地方都用的到 - 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
以上的数据类型都是基本数据类型的原子操作数据类型,在想使用哪种类型的时候直接换成原子类型即可