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。
如果只是想要等待任务执行完成,并不关心它的执行时间,那么可选用一个大的超时时间,比如几天。
如果只是想要等待任务执行完成,并不关心它的执行时间,那么可选用一个大的超时时间,比如几天。