线程池
线程池的好处: 重用已有的线程,而不是每次都创建新的线程
- 懒加载: 用的时候才创建,没有用到不会提前创建
- 线程数量可控制: 可设置线程数量和线程的上限
- Executors的方法: 可以用来创建试用于不同场景的线程池
创建线程池
1.Executors:工具类
ExecutorService service = Executors.newCachedThreadPool();//创建带缓冲的线程池
ExecutorService service = Executors.newFixedThreadPool(n);//创建固定大小(指最大值)的线程池
以上创建线程的方法存在的问题:
- newCachedThreadPool : 线程本身没有上限
- newFixedThreadPool : 等待队列没有上限
//提交任务
service.submit(Runnable 对象);
Future future = service.submit(Callable 对象);
future.get();//获取结果
//这里的Runnable 和Callable 都可以简化为Lambda表达式
//停止线程池
service.shutdown();//关闭
- 如果池中没有空闲的线程,就会创建新线程
- 如果有空闲线程,就会重用空闲线程