线程执行器 Executor (1)

Executor 是 java 5 带进来的, 这套机制称之为执行框架,围绕着 Executor 接口和它的子类接口 ExecutorService 以及实现这个两个接口的
ThreadPoolExecutor展开的java

Executors 建立 执行器框架

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();

方法:线程

executor.getPoolSize();           //返回线程池的大小

  executor.getActiveCount();        //返回正在执行的任务的线程数。

  executor.getCompletedTaskCount(); //返回已经完成的任务任务数。

  executor.getLargestPoolSize();    //返回曾同时位于线程池中的最大线程数。

  /*
  当即关闭。
  1.再也不执行那等待的线程
  2.返回等待执行的线程列表
  3.正在运行的线程将继续运行
   */
  executor.shutdownNow();

  /*
    若是调用了shutdownNow() 或 shutdown() 方法 ,并执行器完成 关闭过程,将返回true
    表示线程池中已经要运行的任务了,也没有等待的任务。
   */
  executor.isTerminated();

  /*
  若是调用了shutdown() 方法 ,将返回true
  可能,线程池中还有正在运行的任务,和等待的任务
   */
  executor.isShutdown();


 //将等线程池中已经提交的任务完成。会拒绝以后提交的任务,但正在运行的,和等待的任务将继续
 executor.shutdown();

  //当前线程将阻塞5秒。等待线程池中的任务结束。有可能过了5秒后线程池中的任务也还未结束
//返回一个布尔值,true 表示与 isTerminated 的状况同样
  executor.awaitTermination(5, TimeUnit.SECONDS);
     

  //暂停线程池中的全部任务(包含正在执行中的任务和未执行的任务)。立刻关闭线程池
   executor.shutdownNow();

 

单个线程执行器code

executor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor();

 

固定大小的执行器2接口

 

executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);

运行多个任务并处理第一个结果get

/*
 invokeAny 方法接收多个线程运行,并返回第一个完成任务而且没有抛出异常的任务执行结果
 */
executor.invokeAny(Collections.emptyList());

 

运行多个任务,并处理全部结果it

//发送一个线程列表给执行器,并等待列表中全部任务执行完成。
  executor.invokeAll(Collections.emptyList());

 

延时执行任务io

ScheduledThreadPoolExecutor scheduledThreadPoolExecutor =
  (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(5); //线程池的大小为5
scheduledThreadPoolExecutor.schedule(() -> { }, 1, TimeUnit.SECONDS);  //将延时一秒后执行任务。

若是想要在某个时间点执行,那就要本身去计算当前时间与要预期时间的差值class

 

周期性的执行任务List

 

scheduledThreadPoolExecutor.scheduleAtFixedRate(()->{},1,2,TimeUnit.SECONDS);

1 表示 任务将在 1秒后执行
2 表示 两个任务执行间隔周期为 2 秒
说明,虽然两个任务的间隔为 2 秒,但若是上一个线程的执行时间大于2秒。那么就有可能存在两个或多个线程并存

 

scheduledThreadPoolExecutor.scheduleWithFixedDelay(()->{},1,2,TimeUnit.SECONDS);

 

2 表示 上一个任务的结束时间 到下一个任务的开始时间的间隔。 说明,这个状况下。就不会存在上一个任务与下一个任务并存的状况

相关文章
相关标签/搜索