240 发简信
IP属地:河北
  • 120
    还在从零开始搭建项目?推荐一款高颜值的前后端分离脚手架!

    从零开始搭建项目,没有好用的脚手架怎么行!最近发现一款高颜值的前后端分离脚手架sa-plus,自带代码生成器,可一键生成前端、后端、API文档代码,推荐给大家! sa-plu...

  • 120
    从应用到底层 36张图带你进入Redis世界

    总感觉哪里不对,但是又说不上来 1、基本类型及底层实现 1.1、String 用途: 适用于简单key-value存储、setnx key value实现分布式锁、计数器(原...

  • 楼主你好,我是来怼你的。
    你的问题是:你讲讲线程池的实现原理。
    然而我个人觉得你的回答也是答非所问。
    如果要讲线程池原理,那我们就干脆抛开JDK线程池不谈。手动实现线程池。
    首先引入几个概念:一个是线程池、一个是线程,一个是任务。他们的关系就是,线程池中包含有运行任务的线程,这些线程都可以复用。但平时我们知道,线程的run方法执行完就结束了,所以如果线程池中的线程可以复用,那一定意味着这个线程没有结束(不死),要想不死,最简单的办法就是在run方法中死循环(当然还有别的办法)。所以线程池说白了,就是创建一个具有一定数量的线程,这些线程的run方法都是死循环的(一定条件下可以结束)。那么如何让线程池中的线程,去执行任务呢?只需要把任务放在一个合理的列表容器中,让线程池去这个任务列表中取即可。这样一来就清晰了,线程需要放在线程池中,任务需要放在任务列表中。两者是m:n的比列。只需要调整好这个比例,就能够提高效率。之所以高效主要原因是线程复用,省掉了“按需创建”这种方式带来的开销。
    这才是真正的线程池原理。
    而你说的,maxSize,IddleSize,minSize,那些都是基于这个基础上进行更细粒度的扩展管理的参数而已。
    怼完毕!
    欢迎回怼!