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