1、认识Executor(执行器)
Java线程池中的顶层接口,用来执行任务的,只包含一个方法execute(Runnable command)
2、ExecutorService
继承Executor接口,代表启动多个线程为用户提供服务,启动方法是submit(Runnable/Callable),返回对象是Future类型(该类代表线程执行后的返回值)
3、Callable,对Runnable进行了扩展,但不是Runnable的子接口
对Callable的调用,可以有返回值,并且可以抛出异常
4、ThreadPool – 线程池
在Java中,线程池都实现了ExecutorService接口
六个线程池(实际是五种)
4.1 FixedThreadPool:固定容量的线程池,当容量减为0后,后加入的任务会等待,直到有线程释放出来
4.2 CacheThreadPool:当线程池中的线程都得到任务执行后,再多出的任务,不会等待,而是由线程池在创建一个线程执行,并且线程池中线程默认60S没有执行任务,线程池会将该线程销毁
4.3 SingleThreadPool:单一线程池,只有一个线程,与一个线程区别是其可以复用
4.4 ScheduledThreadPool:有计划时间的线程,也可以说是定时的线程,4个参数,第一个Runnable是执行的任务,第二个initialDelay是第一个线程多久后执行,第三个参数period是隔多长时间执行下一个任务,第四个参数unit表示前两参数的时间单位
4.5 WorkStealingPool:工作窃取,就是说该线程池中的每个线程都拥有自己的任务队列,当某个线程将自己的任务队列中的任务执行完后,会窃取别的线程队列中的任务进行执行。并且该线程池中的线程是后台线程(守护线程/精灵线程,daemon),主线程比进行阻塞式无法看到这些线程的标准输出。底层基于ForkJoinPool线程池
4.6 ForkJoinPool:分叉-加入线程池,该线程池可以讲一个大任务划分成若干个小任务
其中两种:有返回值的(extends RecursiveTask<V>)、没有返回值(extends RecursiveAction)
5、线程池的七个参数(截于Java Platform Standard Edition 6 的 API 规范)