1、Java中线程池包含了那些参数?各参数的作用是什么?(ThreadPoolExecutor)
比如去火车站买票, 有10个售票窗口, 但只有5个窗口对外开放. 那么对外开放的5个窗口称为核心线程数, 而最大线程数是10个窗口.
如果5个窗口都被占用, 那么后来的人就必须在后面排队, 但后来售票厅的人会越来越多, 已经人满为患, 就类似于线程队列已满.
这时候火车站站长下令, 把剩下的5个窗口也打开, 也就是目前已经有10个窗口同时运行. 后来又来了一批人,10个窗口也处理不过来了,
而且售票厅人已经满了, 这时候站长就下令封锁入口,不允许其他人再进来, 这就是线程异常处理策略.而线程存活时间指的是,
允许售票员休息的最长时间, 以此限制售票员偷懒的行为。
ThreadPoolExecutor mExecutor = new ThreadPoolExecutor(corePoolSize,// 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 闲置线程存活时间
TimeUnit.MILLISECONDS,// 时间单位
new LinkedBlockingDeque(),// 线程队列
Executors.defaultThreadFactory(),// 线程工厂
new AbortPolicy()// 队列已满,而且当前线程数已经超过最大线程数时的异常处理策略
);
2、BIO、NIO和AIO的区别和使用场景述一下?
IO:面向流
BIO:同步阻塞
NIO:面向缓冲,同步非阻塞,流同时具备读和写的功能。高并发(万人聊天)
AIO:异步非阻塞,异步IO的缩写
有一个烧水的案例:
假设有一个场景,有一排水壶在烧水
BIO:叫一