JUC高并发
leo825...
越努力越幸运
展开
-
J.U.C系列(六)ForkJoin的使用
ForkJoin主要用于并行计算中,和 MapReduce 原理类似,都是把大的计算任务拆分成多个小任务并行计算。package com.leo.demo.juctest;import java.util.concurrent.ExecutionException;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Future;import java.util.concurrent.RecursiveTas原创 2020-05-14 00:31:09 · 229 阅读 · 0 评论 -
J.U.C系列(五)BlockingQueue的使用
BlockingQueuejava.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现:FIFO 队列 :LinkedBlockingQueue、ArrayBlockingQueue(固定长度)优先级队列 :PriorityBlockingQueue提供了阻塞的 take() 和 put() 方法:如果队列为空 take() 将阻塞,直到队列中有内容;如果队列为满 put() 将阻塞,直到队列有空闲位置。使用 BlockingQueue 实现生产者消费者问题原创 2020-05-14 00:24:31 · 174 阅读 · 0 评论 -
J.U.C系列(四)FutrueTask的使用
FutureTaskFutureTask实现了RunnableFuture接口,RunnableFuture接口继承于Runnable, Future<V>这使得FutureTask既可以当做一个任务执行,也可以有 返回值。public class FutureTask<V> implements RunnableFuture<V>public interface RunnableFuture<V> extends Runnable, Future&原创 2020-05-11 13:44:52 · 329 阅读 · 0 评论 -
J.U.C系列(三)Semaphore的使用
Semaphore类似于操作系统中的信号量,可以控制值对互斥资源的访问线程数。举个例子:比如一共3把伞,9个人来借伞,伞借出去了就不能借给其他人,直到有人还伞。参考以下小demo理解以下。package com.leo.demo.juctest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.*;/** * @ClassName: SemaphoreExample * @原创 2020-05-10 16:18:19 · 253 阅读 · 0 评论 -
J.U.C系列(二)CyclicBarrier的使用
CyclicBarrier用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。和 CountdownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。CyclicBarrier 和 CountdownLatch 的一个区别是,CyclicB...原创 2020-04-29 00:28:47 · 214 阅读 · 0 评论 -
J.U.C系列(一)CountDownLatch的使用
CountDownLatch它是用来控制一个或者多个线程等待多个线程。它的实现原理是内部使用了一个ctn的计数器,当调用countDown()方法的时候计数器就执行减1操作直到减到0的的时候那些之前调用await()方法而在等待的线程就会被唤醒。有一个场景可以很好理解这个关键字的使用:火箭发射案例。火箭发射的时候需要每个子程序都准备好才能发射,如何做到让各个子程序异步的去执行自己的程序然后都...原创 2020-04-28 23:41:43 · 165 阅读 · 0 评论