为何使用JAVA线程池
1 线程分类
--用户级线程
用户维护,存在于用户空间;
--内核线程
系统内核级线程,存在于内核空间;
java线程启动,调用库内核调度器,生成的是内核级线程,共享CPU
2 使用线程池优势
--多线程并发执行时,CPU时间片到了之后,切换上下文耗费资源;
--线程稀缺资源,避免资源消耗,可以资源复用;
--减少线程的创建和消亡,提高响应性能;
3 java常用线程池
Executor execute方法
ExecutorService 定义了 shutdown等等具体行为方法
AbstractExecutorService
SingleThreadPool 和 newCachedTheadPool 【阿里规约不建议,详情看源码,有缺陷】
可以通过自己创建的方式,new ThreadPoolExecutor 创建线程池
核心参数
corePoolSize 核心处理业务的线程数
maxinumPoolSize 最大线程数
keepAliveTime 非核心数线程保持的时长
Time unit 单位是毫秒还是秒
workQueue 任务阻塞等待队列BlockingQueue
RejectExecuttionHandel 拒绝任务策略【丢弃任务抛异常 or 拒绝任务,自己管理执行】
4 线程池状态
Running 可接受新任务
Shutdown 不接受新任务,但是处理已添加的任务
stop 不接受新任务,直接终止处理任务
tidying 状态
terminled 阻止线程池,然后消亡
合理设置线程池的大小
CPU密集型 频繁计算的,可参考 线程数=CPU核数 N 核 + 1
I/O密集型 后台异步IO操作,可参考 线程数=CPU核数 N 核*2 + 1
线程池内部工作原理过程如下图:
以上是 为何使用JAVA线程池 的全部内容, 来源链接: utcz.com/z/518325.html