threadpool学习

大致框架
图片
使用线程池的好处:
降低资源消耗:通过重复利用已创建的线程池降低线程创建和销毁造成的消耗
提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行
提高线程的管理性:线程是稀缺资源,不能无限重复创建,使用线程池可以进行统一的分配和调优
Executor框架:进行线程的启动和管理,能避免this空间逃逸问题
this 逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误
框架组成:
任务的创建:runable和callable
任务的执行:executor
可能存在的异步执行任务:Future
框架使用流程:
先创建runable对象/callable对象
区别:runable不需要返回值,callable会返回(通过泛型的方式)
然后创建线程池:核心参数:核心线程数,最大线程数,空闲存活时间,任务对列存储数量,对列拒绝策略
额外的线程池:了解即可
FixedThreadPool;SingleThreadExecutor;CachedThreadPool
图片
核心对比:
execute()方法用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功与否;
submit()方法用于提交需要返回值的任务。线程池会返回一个 Future 类型的对象,通过这个 Future 对象可以判断任务是否执行成功 ,并且可以通过 Future 的 get()方法来获取返回值,get()方法会阻塞当前线程直到任务完成
shutdown() :关闭线程池,线程池的状态变为 SHUTDOWN。线程池不再接受新任务了,但是队列里的任务得执行完毕。
shutdownNow() :关闭线程池,线程的状态变为 STOP。线程池会终止当前正在运行的任务,并停止处理排队的任务并返回正在等待执行的 List
isShutDown 当调用 shutdown() 方法后返回为 true。
isTerminated 当调用 shutdown() 方法后,并且所有提交的任务完成后返回为 true

导航