当前位置:嗨网首页>书籍在线阅读

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