摘要:先来提出问题和给出答案,之后再刨根问底的揭开面纱: 问:volatile 的可见性和禁止指令重排序是怎么实现的? 答:可见性:是通过缓存一致性协议来达到的 禁止指令重排序:JMM 模型里有 8 个指令来完成数据的读写,通过其中 load 和 store 指令相互组合成的 4 个内存屏障实现禁止指令重 阅读全文
posted @ 2020-04-28 16:10 星火燎原智勇 阅读(362) 评论(1) 推荐(3) 编辑
摘要:来看一道笔试题: 模拟一个容器,有 2 个线程生成数据写入,10 个线程消费的生产者消费者模型 阅读全文
posted @ 2020-04-28 10:27 星火燎原智勇 阅读(62) 评论(0) 推荐(0) 编辑
摘要:CLH 队列 CLH同步队列是一个FIFO双向队列,AQS 依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点唤醒(公平锁),使其再次尝试获取同步状态 阅读全文
posted @ 2020-04-28 10:19 星火燎原智勇 阅读(178) 评论(0) 推荐(0) 编辑
摘要:背景 这篇博文是接着上一篇 线程池专题 的一个补充,是针对线程池底层队列的种类做一个进一步的深入详解,上一篇博文主要针对一线大厂针对线程池的灵魂 5 问展开的,而这一篇也是综合了另外面试经验,把底层的一些内容再深入剖析一下。 线程池任务处理 如果运行的线程数 < corePoolSize,则 Exe 阅读全文
posted @ 2020-04-28 01:22 星火燎原智勇 阅读(239) 评论(0) 推荐(0) 编辑