
并发编程
qq_39158142
这个作者很懒,什么都没留下…
展开
-
线程池
一、java 原生线程池1.ThreadPoolExecutor的重要参数corePoolSize:核心线程数核心线程会一直存活,即使没有任务需要执行当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)...原创 2018-09-28 17:30:24 · 250 阅读 · 0 评论 -
多线程步调一致
并发编程三个核心问题:分工、同步、互斥背景介绍这里我们来模拟一下商城对账单流程,如下图:总共分为4个步骤:1 查询未对账订单2 查询派送单3 进行对账4 将对账结果写入差异库代码实现1 首先我们新建一个类,OrderTest,使用单元测试。这里为了模拟,我们将所有操作都模拟为一秒。public class OrderTest { List&l...原创 2019-07-08 11:17:58 · 231 阅读 · 0 评论 -
CompletableFuture
在JDK1.5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下://定义一个异步任务Future<String> future = executor.submit(()->{ Thread.sleep(2000); return "hello world";})...原创 2018-11-27 09:55:05 · 212 阅读 · 0 评论 -
CompletionService
如果我们现在有一组类似的任务提交给Executor,并希望能够按照执行时间来获取最终结果。我们可以使用Executor 和 BlockingQueue来实现,java已经帮我们实现这个。1 创建:ExecutorCompletionService(Executor executor);ExecutorCompletionService(Executor executor, Bloc...原创 2019-07-08 19:49:19 · 179 阅读 · 0 评论 -
java Fork/Join模型
当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务。然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成小任务需要在任务执行的过程中动态拆分。这样,大任务可以拆成小任务,小任务还可以继续拆成更小的任务,最后把任务的结果汇总合并,得到最终结果,这种模型就是Fork/Join模型。Java7引入了Fork/Joi...原创 2019-07-11 19:27:07 · 345 阅读 · 0 评论 -
java semphore实现 简单数据库连接池
1 自定义实现(semphore/阻塞队列)首先我们先介绍一下什么是信号量:类似于我们去公共澡堂洗澡,需要先去前台付款拿到储物柜的钥匙,如过没有空闲的储物柜,我们就需要一直等待,直到有别人洗完澡,让出储物柜,这里的钥匙就相当于信号量(有限的数量)。信号量可以使共享变量可被指定数量的线程访问。一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通...原创 2019-07-05 13:49:43 · 220 阅读 · 0 评论