线程池
线程池概述
经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对线程影响很大。
使用线程池的好处
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。
- 高响应速度(减少了创建新线程的时间)
- 降低资源消耗(重复利用线程中的线程,不需要每次都创建)
- 便于线程管理:corePoolSize核心池大小、maxinumPoolSize最大线程数、KeepAliveTime:线程没有任务时最多存活多久。
常用类&方法
Executors:工具类、线程池的工厂类。 用于创建并返回不同类型的线程池。 |
|
ExecutorService真正的线程池接口 |
void execute(Runable command) 执行任务,没有返回值。一般用来执行Runnable |
<T> Future<T> submit(Callable<T> task) 执行任务,有返回值,一般用来执行Callable |
|
void shutdown() 关闭连接池 |
|
Future future = executor.submit(task); 提交任务其实就是将任务,放入线程池的待执行队列里面。 放入队列并不需要多长时间,所以可以立即返回。 |
future.isDone() 查看任务的完成情况 |
future.get() 如果任务完成了,完成结果是什么 |
|
future.cancel() 可以选择性地取消任务 |