摘要: 很多朋友应该关注到了。线程池的执行任务有两种方法,一种是 submit、一种是 execute; 这两个方法是有区别的,那么基于这个区别我们再来看看。 execute 和 submit 区别 1. execute 只可以接收一个 Runnable 的参数 2. execute 如果出现异常会抛出 3 阅读全文
posted @ 2020-06-12 14:15 47号Gamer丶 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 本文主要讲解线程池的完成服务: CompletionService接口定义了一组任务管理接口: 1.submit() - 提交任务; 2.take() - 获取任务结果; 3.poll() - 获取任务结果 ExecutorCompletionService类是CompletionService接口 阅读全文
posted @ 2020-06-12 14:13 47号Gamer丶 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 紧接上篇~ addWorkerFailed addWorker 方法中,如果添加 Worker 并且启动线程失败,则会做失败后的处理。 这个方法主要做三件事: 1. 如果 worker 已经构造好了,则从 workers 集合中移除这个 worker。 2. 原子递减核心线程数(因为在 addWor 阅读全文
posted @ 2020-06-12 14:11 47号Gamer丶 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 线程池原理篇幅太长,所以博主分为上、下两章节讲解,望有兴趣的朋友慢慢阅读~ 什么是线程池 在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于 阅读全文
posted @ 2020-06-12 14:09 47号Gamer丶 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 构造方法 ArrayBlockingQueue 提供了三个构造方法,分别如下。 capacity: 表示数组的长度,也就是队列的长度fair:表示是否为公平的阻塞队列,默认情况下构造的是非公平的阻塞队列。 其中第三个构造方法就不解释了,它提供了接收一个几个作为数据初始化的方法: public Arr 阅读全文
posted @ 2020-06-10 18:01 47号Gamer丶 阅读(361) 评论(0) 推荐(1) 编辑
摘要: 生产者消费者的实际使用 我相信大家都有使用过分布式消息队列,比如 ActiveMQ、kafka、RabbitMQ 等等,消息队列的是有可以使得程序之间实现解耦,提升程序响应的效率。如果我们把多线程环境比作是分布式的话,那么线程与线程之间是不是也可以使用这种消息队列的方式进行数据通信和解耦呢? 阻塞队 阅读全文
posted @ 2020-06-10 17:39 47号Gamer丶 阅读(242) 评论(0) 推荐(0) 编辑
摘要: AQS 是什么 在 Lock 中,用到了一个同步队列 AQS,全称 AbstractQueuedSynchronizer,它是一个同步工具也是 Lock 用来实现线程同步的核心组件。如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握。 AQS 的两种功能 从使用层面来说,AQS 的 阅读全文
posted @ 2020-06-10 16:55 47号Gamer丶 阅读(899) 评论(0) 推荐(0) 编辑
摘要: 紧接上篇~ 数据迁移阶段的实现分析 通过分配好迁移的区间之后,开始对数据进行迁移。在看这段代码之前,先来了解一下原理: synchronized (f) {//对数组该节点位置加锁,开始处理数组该位置的迁移工作 if (tabAt(tab, i) == f) {//再做一次校验 Node<K, V> 阅读全文
posted @ 2020-06-10 15:32 47号Gamer丶 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 紧接上篇 CounterCells 初始化图解 初始化长度为 2 的数组,然后随机得到指定的一个数组下标,将需要新增的值加入到对应下标位置处: transfer 扩容阶段 判断是否需要扩容,也就是当更新后的键值对总数 baseCount >= 阈值 sizeCtl 时,进行 rehash,这里面会有 阅读全文
posted @ 2020-06-10 15:31 47号Gamer丶 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 这篇随笔的篇幅长,所以分为上、中、下三篇,内容紧接上篇,如果有兴趣可自己抽空揣摩,有错误的地方可以指正。 ConcurrentHashMap 的初步使用及场景 CHM 的使用 ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以Concurre 阅读全文
posted @ 2020-06-10 15:30 47号Gamer丶 阅读(629) 评论(0) 推荐(1) 编辑