目录
1.什么是线程池?
线程池就是一个可以复用线程的技术。
1.不使用线程池的问题:
如果用户每发起一个请求,后台就能创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
2.谁代表线程池?
JDK 5.0起提供了代表线程池的接口:ExecutorService
3.如何得到线程池对象
方式一:
使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象。
方式二:
使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象。
4.临时线程什么时候创建?
新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
5.什么时候会开始拒绝任务?
核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。
6.线程池处理Runnable任务
。。。
总结:
线程池如何处理Runnable任务?
① 使用ExecutorService的方法:
② void exexute (Runnable target)
7.线程池处理Callable任务
总结:
线程池如何处理Callable任务,并得到任务执行完毕后返回的结果。
① 使用ExecutorService的方法.
② Future<T> submit(Callable<T> command).
8.Executors工具类实现线程池:
总结:
1.Executors工具类底层是基于什么方式实现的线程池对象?
线程池ExecutorService的实现类:ThreadPoolExecutor
2.Executors是否适合做大型互联网场景的线程池方案?
① 不合适。
② 建议使用ThreadPoolExecutor来指定线程池参数,这样可以明确线程池的运行规则,规避资源耗尽的风险。