
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 · 258 阅读 · 0 评论 -
J.U.C系列(五)BlockingQueue的使用
BlockingQueue java.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现: FIFO 队列 :LinkedBlockingQueue、ArrayBlockingQueue(固定长度) 优先级队列 :PriorityBlockingQueue 提供了阻塞的 take() 和 put() 方法:如果队列为空 take() 将阻塞,直到队列中有内容;如果队列为满 put() 将阻塞,直到队列有空闲位置。 使用 BlockingQueue 实现生产者消费者问题原创 2020-05-14 00:24:31 · 205 阅读 · 0 评论 -
J.U.C系列(四)FutrueTask的使用
FutureTask FutureTask实现了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 · 356 阅读 · 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 · 270 阅读 · 0 评论 -
J.U.C系列(二)CyclicBarrier的使用
CyclicBarrier 用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 和 CountdownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。 CyclicBarrier 和 CountdownLatch 的一个区别是,CyclicB...原创 2020-04-29 00:28:47 · 238 阅读 · 0 评论 -
J.U.C系列(一)CountDownLatch的使用
CountDownLatch 它是用来控制一个或者多个线程等待多个线程。 它的实现原理是内部使用了一个ctn的计数器,当调用countDown()方法的时候计数器就执行减1操作直到减到0的的时候那些之前调用await()方法而在等待的线程就会被唤醒。 有一个场景可以很好理解这个关键字的使用:火箭发射案例。火箭发射的时候需要每个子程序都准备好才能发射,如何做到让各个子程序异步的去执行自己的程序然后都...原创 2020-04-28 23:41:43 · 187 阅读 · 0 评论