5.7 线程池
5.7.1 线程池的概念
线程池:其实就是一个可以容纳多个线程的容器,其中的线程可以反复利用,省去了重复创建线程对象的操作,不需要反复创建线程而造成过多的资源消耗。
线程池的优点:
- 降低资源消耗
- 减少创建线程和销毁线程的次数,每个线程都可以被重复利用,可执行多个任务。
- 提高响应速度
- 不需要频繁的创建线程,如果有线程可以直接用,不会出现系统死掉。
- 提高线程的可管理性
- 线程池可以约束系统最多只能有多少个线程,不会造成因为系统线程过多而死机。
5.7.2 线程池的使用
1、创建线程池
通过Executors.class
提供的public ExecutorService newFixedThreadPool(int nThread){}
// 创建一个线程池, 线程最大数为3
ExecutorService pools = Executors.newFixedThreadPool(3)
2、往线程池中添加任务
ExecutorService.class
提供线程任务的方法public Future<?> submit(Runnable task)
ExecutorService.class
提供线程任务的方法public Future<?> submit(Callable task)
// 2、往线程池中添加任务
// 像线程池中提交Runnable线程任务
MyRunnable myRunnable = new MyRunnable();
pools.submit(myRunnable);
// 向线程池中提交Callable线程任务
MyCallable myCallable = new MyCallable();
Future<String> t1 = pools.submit(myCallable);
// 获取myCallable线程任务的执行结果
String result = t1.get()
3、关闭线程池
shutdown()
:等待线程完成任务后关闭线程池shutdownNow()
: 立即关闭线程池,不论线程任务是否执行完毕