10 2022 档案
摘要:#概念 fork/join是JDK1.7加入的新的线程池的实现,体现的是一种分治思想,适用于能够进行任务拆分的cpu密集型运算。 任务的拆分就是将一个大的任务拆分为算法上相同的小任务,直到拆分到可以直接求解,或者说是拆分到问题规模足够小以至于直接求解的效率此时要比再拆分求解的效率更高。常用于跟递归相
阅读全文
摘要:#概述 AQS全称是AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点是: 用state属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 state的访问方式有三种,如下: getState方法是获取sta
阅读全文
摘要:#tomcat在哪里用到了线程池 LimitLatch用来限流,可以控制最大连接个数 acceptor负责接收新的socket连接 poller负责监听socket channel是否有可读的IO事件 一旦有可读的IO事件被监听到,就封装一个任务对象socketProcessor,提交给execut
阅读全文
摘要:在任务调度池功能加入之前,可以使用java.util.Timer来实现定时功能,Timer的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或者异常会影响到后面的任务。 #例子 import java.util.Tim
阅读全文
摘要:#定义 就是让有限的工作线程来轮流异步处理无限多的任务。典型实现就是线程池,线程个数是有限的,但是任务是源源不断需要被处理的 假设一个饭店有服务员线程,需要轮流处理客户的点餐任务,如果每一个客户都配一名专属的服务员,那么成本就会非常高。 #饥饿 固定大小的线程池会有饥饿现象,假设这是背景: 两个工人
阅读全文
摘要:#线程的接口以及实现类 #线程池的状态 ThreadPoolExcutor使用int的高三位来表示线程池的状态,低29位表示线程数量 running状态:高三位的值是111,可以接受新任务和处理阻塞队列的任务 shutdown状态:高三位是000,不会再接受新的任务,但是阻塞队列的任务会处理完,可以
阅读全文