范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

池化技术学习

  池化技术学习
  参考文章:https://www.jianshu.com/p/b47222f89c2f
  其实看上面那一篇文章就会对池化技术有一个大概的了解,先不要急着离开去看上面那篇(✿◕‿◕✿)。 前言
  池化技术提出来已经很久了,我们在实际工作中都使用过。什么数据库连接池啊,线程池啊等等。相信都听过也用过,但是池化技术是如何实现的。估计就有一些人没有看过。这里就有我,虽然一直想看,但是没时间(其实就是懒。好吧现在来还债了)。
  我们先从一个实际生活的场景来看。毕竟艺术源于生活,需求来自生活,灵感来自生活。
  小明家有三口人,平时吃饭的时候都是四副碗筷(多一副备用)。过年了,家里来了客人。很热闹。现在家里的人数是10个人。这个时候小明在准备吃饭前就要多拿7副碗筷(这里就不要提公筷啥的了)。有的人吃得快就先吃完了,并且把碗筷洗干净了。这个时候又来了几个客人,这个时候小明就将刚才洗干净的碗筷发给新来的客人(饭菜是足够吃到地老天荒)。新来的客人还在吃,结果又来了一波客人(小明很受欢迎)。小明去取了新的碗筷来,但是还是有人没有拿到碗筷。那这几个人就只能等待其他人吃完。但是此时小明家里已经没有碗筷了,于是新来的客人小明也只能拒绝了。当客人都走了,家里又剩下小明家的三口人,小明将多余的碗筷收起来。
  例子不太恰当凑合用。 从JAVA线程池来看池化技术
  这里看 JDK1.8  的线程池
  ThreadPoolExecutor : ThreadFactory threadFactory  :负责创建新的线程HashSet works   : 保存当前所有的Worker(对thread的包装)BlockingQueue workQueue  : 当前的corePoolSize达到的时候,新提交的任务保存在这里int corePoolSize  : 核心Worker数量int maxPoolSize   : 最大的Worker数量
  线程池的常用调用方式: ThreadPoolUtils.getThreadPool().execute(() -> {       });
  这里我们看下 execute()  方法(这里同上面的博客):// 家里来客人啦,现在的碗筷都够 addWorker(command, true); // 记下来从现有的碗筷中拿一副碗筷 new Worker(firstTask); workers.add(w); t = w.thread; // 拿碗筷 t.start();
  当前worker数量大于等于corePoolSize的时候把任务添加到workQueue (碗筷不够了,要增加碗筷来) workQueue.offer(command); // 当前worker数量超过了workQueue的capacity的时候创建新的线程并用这个线程执行提交的任务 // 这里注意addWorker的第二个参数为false addWorker(command, false);  // 内部使用逻辑: if (wc >= CAPACITY || wc >= (core ? corePoolSize : maximumPoolSize)) return false; new Worker(firstTask); workers.add(w); t = w.thread; t.start();
  当前worker数量大于maxPoolSize的时候执行拒绝策略:(没有可以使用的碗筷了,在来的客人都拒之门外) reject(command);
  线程重复利用以及回收
  Worker核类心属性及方法: Thread thread  : 用于执行任务的线程Runnable firstTask   : 提交时候的任务Worker(Runnable firstTask)   : 创建一个Workervoid run()  : 启动thread执行任务
  Worker(Runnable firstTask)代码片段 通过构造方法调用threadFactory创建新的线程 Worker(Runnable firstTask) { 	  // 标记碗筷使用状态       setState(-1); // inhibit interrupts until runWorker       this.firstTask = firstTask;       this.thread = getThreadFactory().newThread(this); }
  run()代码片段 直接调用 ThreadPoolExecutor 的 runWorker(this)方法 while (task != null || (task = getTask()) != null) { beforeExecute(wt, task); task.run(); afterExecute(task, thrown);  线程执行抛出的一些异常处理 } processWorkerExit(w, completedAbruptly); 从works移除work
  getTask()代码片段如下: boolean timed = allowCoreThreadTimeOut || wc > corePoolSize; Runnable r = timed ?  workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) : workQueue.take(); druid
  DruidDataSource核心类属性及方法: DruidConnectionHolder[] connections   : 保存空闲的连接int poolingCount   :当前池内资源对象的计算DruidConnectionHolder[] evictConnections   :要被移除的连接ReentrantLock lock   : 重入锁保证connections数组的安全访问Condition notEmpty   : 空闲连接全部被使用等待其他客户释放链接,当poolingCount为0的时候await,归还连接的时候signal。Condition empty   : 创建连接的线程里面控制,当poolingCount为0的时候signal创建连接,当前active的连接超过maxActive进行await。DruidPooledConnection getConnectionInternal(long maxWait)   : 获取一个空闲连接recycle(DruidPooledConnection pooledConnection)   : 回收连接
  创建连接 DruidDataSource: init -> CreateConnectionThread.run -> createPhysicalConnection
  从数组获取一个空闲连接 DruidDataSource: getConnection(long maxWaitMillis) -> getConnectionInternal(maxWaitMillis) -> pollLast(nanos) -> DruidConnectionHolder last = connections[poolingCount] 这里可以看到每次都是获取数组的最后一个元素
  归还连接 DruidPooledConnection: DruidPooledConnection 实现javax.sql.PooledConnection;这个方法在框架(mybatis)里面会执行sql操作然后在finally代码块执行 javax.sql.PooledConnection.close() close() ->  recycle() -> dataSource.recycle(this) -> putLast(holder, lastActiveTimeMillis) -> connections[poolingCount] = e
  关闭过期的连接 DruidDataSource: 在shrink方法内部会判断idleTime是否满足条件 init -> createAndStartDestroyThread() -> run -> shrink(true, keepAlive) -> evictConnections[evictCount++] = connection -> close() 注意这里的close和上面归还连接的close是不同的,这里是物理关闭 总结:
  池化技术有一下几个特点。 有公共资源的集合。 资源的获取、释放、回收、销毁。 资源状态的监控 拒绝策略 过期策略

如果把太阳换成天狼星,但是距离比例与太阳与地球的距离比例一样,会怎么样?如果把太阳换成天狼星,不管距离比例是不是一样,地球上都不会再有生命生存了,而且地球也会很快面临两个可能的宿命,就是要么被天狼星的主星吞噬,要么离开轨道在宇宙中漂游。这是为什么呢?首中国的高铁为什么都是在高空架设?这样会不会增加成本呢?这是高铁为了达到速度,必须做出的牺牲!确实,采用咱地面铺设轨道的方法,其成本远远低于采用高架的方式。然而大家想过吗?我们运营高铁的速度可以达到350公里每小时,试验高铁的速度在某些现在1000块的手机基本够用,为什么都要买五六七八千的手机?我曾经比任何人都相信,1000块钱的手机性价比无敌,直到我遭遇了这样的事情,我不再能够坚持我的观点了我曾经是红米手机的忠实粉丝,觉得红米手机是全天下性价比最高的手机,1000块钱的想换手机,3000左右华为小米OPPO,求推荐!谢谢?3000元的预算就不要选什么华为了,这个价格连4G版的Nova8Pro都买不到,至于Nova8倒是够了,可这手机实在太抢手,不加价根本就拿不到。再往下的畅享系列麦芒系列这些就更不建山西临县出现过哪些名人?临县,位于黄河中游晋西黄土高原吕梁山西侧,隶属于山西省吕梁市。历史上可以追溯到夏朝,夏朝时临县属冀州。临县历史上出现的名人并不是很多,历数下来主要有以下几位刘泽民(1944年7月2欠了支付宝的借呗5万块,现在无力偿还怎么办?支付宝应该是所有网贷里面最人性化的了,我花呗欠了2万,借呗欠了四万,已经逾期一年左右了,目前所有接到的电话还没超过10个,打电话来也相对比较客气,不像其他网贷你可能逾期一天都不止这为什么现在百度一下很难搜到想要的结果了?这个问题我之前讨论过,这是中文互联网的悲哀,现在搜问题都是翻成英文,搜谷歌。主要是国内移动互联网太发达了,而且各家都在圈地各自为战,维护着自己小圈子里的流量,即时没有封死百度,点开地球上如果进化出了只针对人类的真正天敌,它有可能是什么样子的?谢谢悟空问答平台的老师。地球上如果进化出人类天敌足以致人类灭绝。那就是病毒。自从地球上生活着人类,各种有毒细菌和病毒时刻伴随着人类,无时无刻等待吐噬人的生命。人类也在生活中加以不同未来十年,SARSCoV2(新冠病毒)的严重程度将如何变化?这个疾病起码数年之内不可能消失,非常诡异,比早年SARS轻,死亡率没那么高,但传播却很迅速,比流感又严重得多,威胁抵抗力差的人的生命,各国有不同国情,措施也很难一致,特别英国发现新广东出现的不明飞行物是什么?你怎么看?一颗流星,不必夸张。给中国拜年了呗,还能做个啥!?我近距离见过飞碟,对,明确就是飞碟,不是UFO(不明飞行物)。不清楚近期广东那个UFO事件,但我要指出,飞碟是有声音的,不清楚传播从16位到32位再到64位,为何16年过去,依然没有128位系统出现?从win98到xp到win7再到现在的win10,操作系统历经一代又一代,目前使用最多的应该是64位的操作系统(win7和win10)都有。虽然64位操作系统从推出到现在已有15年
手机销量大洗牌?三星苹果增长,国产品牌仍需加把劲最近,市场调研机构Canalys公布了今年第一季度手机的出货量,根据给出的数据来看,目前全球市场份额最多的五个手机品牌分别是三星苹果小米OPPO和vivo。其中,只有三星和苹果同比下跌达3200元,一亿像素2K屏幕,顶尖旗舰无奈降价如果时间推到几年前的话,各家手机的屏幕参数里并会有高刷新率的选项,但由于目前手机行业竞争激烈的加剧,很多手机厂商也是追求新的卖点,所以在手机屏幕也算是越来越卷了。毕竟要说到高刷新率今年一季度海南省推广新能源汽车超2万辆同比增长325记者4月22日从海南省工信厅获悉,截至3月底,2022年全省累计推广应用新能源汽车2。02万辆,同比增长325。其中个人用户1。7万辆,占推广总量的84。39全省新能源汽车保有量达传京东方今年将给苹果供给3000万块OLED屏幕鞭牛士4月23日消息,韩媒TheElec,经产业链确认,此前京东方生产iPhone面板遭遇了驱动IC缺货的窘境,此问题在下个月或许就能够彻底解决。另外,京东方今年还将给苹果供给30独立分控远程开关机,向日葵P2智能插线板实用性我给满分对于我们这种加班已经成为家常便饭的人来说,时常会因为领导突如其来的电话,而打断手头上正在做的事情。放在平时也就算了,如今深圳抗疫形势变得慢慢严峻起来,我们也不得响应社区的号召,老老仅7574元!战神ZX9DA5DP限时特惠,笔记本95折可加500元购机神券为选购电脑做过功课的朋友,想必一定看了神舟战神系列。作为业内高性能笔记本的代表,神舟战神笔记本电脑在近些年的优化表现还算不错,特别是性能方面的表现备受玩家和设计工作者的喜爱,再加上VIPKID被强制执行近45万多位高管已离职中新经纬4月24日电天眼查APP显示,近日,VIPKID关联公司北京大米科技有限公司新增被执行人信息,执行标的近45万元,立案日期为4月22日,执行法院为北京市石景山区人民法院,案电脑反应慢怎么办?3个简单步骤,让电脑速度瞬间变快电脑用过一段时间后,反应速度越来越慢,真急人!那么电脑反应慢怎么办?有时候,我们真想换个新电脑算了。然而,且慢,今天孙师傅小窍门小妙招就给大家分享3个让电脑重新变快的方法,兴许您就白手起家打造8万亿金融帝国,隐形富豪马明哲的赚钱速度有多快?说起中国的二马,很多人都知道是马化腾和马云。然而在2013年,却有三马聚集于复旦大学,向讲座下的大学生谈论他们对互联网发展金融的一些预测。这时人们惊奇地发现,除了早已熟悉的二马外,微信有11亿的用户,但马化腾为啥不收费呢?看了QQ就能明白了微信有11亿的用户,但马化腾为啥不收费呢?看了QQ就能明白了!当年QQ走红的时候,一天的注册量超过了100万,腾讯为了减轻服务器的压力,腾讯开始限制用户注册,就让人们打电话或者发短从创建线程的方法出发,反向理解线程到底是啥Java程序中,创建多线程有两种基本方法1。继承Thread类classMyThreadextendsThread这里面定义的,是线程要做的工作内容publicvoidrun()继