前言 ConcurrentHashMap 鬼斧神工,并发添加元素时,如果 map 正在扩容,其他线程甚至于还会帮助扩容,也就是多线程扩容。就这一点,就可以写一篇文章好好讲讲。...
前言 ConcurrentHashMap 鬼斧神工,并发添加元素时,如果 map 正在扩容,其他线程甚至于还会帮助扩容,也就是多线程扩容。就这一点,就可以写一篇文章好好讲讲。...
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。...
线程池中有一定数量的工作线程,工作线程会循环从任务队列中获取任务,并执行这个任务。那么怎么去停止这些工作线程呢?这里就涉及到线程池两个重要概念:工作线程数量和线程池状态。 一...
使用Explain优化SQL语句 原文出处:https://my.oschina.net/liughDevelop/blog/1788148 索引类似大学图书馆建书目索引,可...
楼主你好,我是来怼你的。
你的问题是:你讲讲线程池的实现原理。
然而我个人觉得你的回答也是答非所问。
如果要讲线程池原理,那我们就干脆抛开JDK线程池不谈。手动实现线程池。
首先引入几个概念:一个是线程池、一个是线程,一个是任务。他们的关系就是,线程池中包含有运行任务的线程,这些线程都可以复用。但平时我们知道,线程的run方法执行完就结束了,所以如果线程池中的线程可以复用,那一定意味着这个线程没有结束(不死),要想不死,最简单的办法就是在run方法中死循环(当然还有别的办法)。所以线程池说白了,就是创建一个具有一定数量的线程,这些线程的run方法都是死循环的(一定条件下可以结束)。那么如何让线程池中的线程,去执行任务呢?只需要把任务放在一个合理的列表容器中,让线程池去这个任务列表中取即可。这样一来就清晰了,线程需要放在线程池中,任务需要放在任务列表中。两者是m:n的比列。只需要调整好这个比例,就能够提高效率。之所以高效主要原因是线程复用,省掉了“按需创建”这种方式带来的开销。
这才是真正的线程池原理。
而你说的,maxSize,IddleSize,minSize,那些都是基于这个基础上进行更细粒度的扩展管理的参数而已。
怼完毕!
欢迎回怼!
某天我在****的时候,突然有个小伙伴微信和我说:“狼哥,求教为毛wait()要放在同步块中?” 我顿时觉得**一紧,仔细回顾一下,如果wait()方法不在同步块中,代码的确...
最近在调研MAT和VisualVM源码实现,遇到一个可疑问题,两者计算出来的对象大小不一致,该信哪个? 为了复现这个问题,准备了4个简单类: 再来个主函数: 本地环境是64位...
无题 时人多见轻生死,失意偏从苦海沉。 鬼火九幽通地府,阵图八垒放生门。 应侯濒死成名相,游客迷途遇古村。 病树来年还有望,人生何处不逢春? ——嬴公子 春晚 跨过岁尾跃年头...
你问我寻找什么 我以为那是你 玻璃窗前的雾水 是否是你留下的影子 给我一个方向 好让我去寻你的足迹 你问我寻找什么 我以为那是你 湖面上飘落的黄叶 是否是你留下的足迹 给我一...