07-其他说明
其他说明
Executors
类也提供了其他方法来创建 ThreadPoolExecutor
对象。
newCachedThreadPool()
:该方法返回一个ExecutorService
对象,因此它可以转换成ThreadExecutor
对象并获取其全部方法。需要的话,可以在它的缓存线程池里面创建新的线程来执行新任务。另外,它会其重用现存且已经执行完当前任务的线程。newSingleThreadExecutor()
:这是一个比较特别的大小固定的线程执行器。它创建了只包含一个可用线程的执行器,因此同一时间它只能执行一个任务。
ThreadPoolExecutor
类提供了许多方法来获取它的状态信息。本案例用到了 getPoolSize()
、 getActiveCount()
和 getCompletedTaskCount()
方法来获取线程池的大小、线程数量和已完成的任务数等信息。也可以用 getLargestPoolSize()
方法来返回一段时间内线程池中的最大线程数。
ThreadPoolExecutor
类也提供了其他与终止线程执行器相关的方法,具体如下。
shutdownNow()
:该方法会立刻终止执行器,而非执行现存的任务。虽然该方法会返回一个现存任务的列表,已经执行的任务会在调用方法后继续执行,但是该方法会直接返回结果,而非等待它们运行完成。isTerminated()
:该方法用来判断是否执行器处于结束过程。如果调用了shutdown()
或shutdownNow()
方法,则该方法会返回true
。isShutdown()
:如果调用了执行器的shutdown()
方法,则该方法会返回true
。awaitTermination(long timeout, TimeUnit unit)
:该方法会阻塞调用线程直到执行器关闭或是超时。TimeUnit
类是一系列常量的枚举:DAYS
、HOURS
、MICROSECONDS
、MILLISECONDS
、MINUTES
、NANOSECONDS
和SECONDS
。
如果只是想要等待任务执行完成,并不关心它的执行时间,那么可选用一个大的超时时间,比如几天。