本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
Fork-join
Fork-join使用的是一种“分而治之”的思想,将一个很大的任务拆分成很多个小任务,并且小任务之间毫无关联。
适用场景:
因为fork-join采用递归比较消耗性能,还有一些线程并行结果数据统计,比较适合一些需要很大的计算能力的地方,比如数据量很大的一个统计,数据量很大的一个排序等。
Fork-join使用的标准范式:
自己的任务(MyTask extends RecursiveTask/RecursiveAction/ForkJoinTask)
- RecursiveTask:forkjoin的逻辑处理抽象类,继承了他重新compute计算方法实现自己的递归拆分逻辑,有返回结果集。
- RecursiveAction:forkjoin的逻辑处理抽象类,无返回结果集,适合使用execute启动使用。
CountDownLatch
CountDownLatch构造的时候需要传入一个整数n,在这个整数“倒数”到0之前,主线程需要等待,而倒数的过程是各个执行线程驱动的,每个线程执行完一个任务“倒数”一次。
CyclicBarrier作用、应用场景
CyclicBarrier同步屏障,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,所有被阻塞的线程才能继续执行。
Semaphore作用、应用场景
Semaphore的基本使用场景是限制一定数量的线程能够去执行
Semaphore在构造的时候, 可以传入一个int. 表示有多少许可(permit). 线程获取锁的时候, 要告诉信号量使用多少许可, 当线程要使用的许可不足时, 则调用的线程则会被阻塞。 \
Exchange作用、应用场景
exchange表示一种会和点,两个线程在这里交换对象。两个线程各自调用exchange方法进行交换。线程A调用Exchange的exchange方法后,会陷入阻塞状态,直到线程B也调用了exchange方法,然后以线程安全的方式交换数据,之后A和B继续运行。