executorService

类翻译

一个executor 可以提供方法来处理终止和产生一个 future 来记录一个或多个异步任务的进度。(mark,executor目前只是一个接口,目前还做不到。。。)

一个executorService可以被关闭,这将会导致它拒绝新的任务。

ExecutorServie提供了两个关闭方法。shutdown 方法在终止之前允许先前提交的任务执行完。shutdownNow 方法阻止等待的任务启动 并且尝试停止当前正在执行的任务。一旦终止,Executor没有执行中的任务,没有等待中的任务,没有新任务可以提交。

一个未被使用的ExecutorService应该被关闭来回收它的资源。

submit 方法扩展了 Executor的基本方法 execute,通过创建并返回Future,Future可以用来取消执行 和/或者 等待(执行)完成。

invokeAny 和 invokeAll 方法 是执行最通用的,有用的集合执行形式。执行集合任务,然后等待至少一个或全部完成。

ExecutorCompletionService可以被用来编写这些方法的定制变体。
Executors 为executor Service提供了方便的工厂方法。(mark:executor是也为executor提供了工厂)

使用示例:

这里有一个网络服务的草图,其中线程在线程池中来处理请求,他使用了预配置工厂方法(newFixedThreadPool)。

 *  <pre> {@code
 * class NetworkService implements Runnable {
 *   private final ServerSocket serverSocket;
 *   private final ExecutorService pool;
 *
 *   public NetworkService(int port, int poolSize)
 *       throws IOException {
 *     serverSocket = new ServerSocket(port);
 *     pool = Executors.newFixedThreadPool(poolSize);
 *   }
 *
 *   public void run() { // run the service
 *     try {
 *       for (;;) {
 *         pool.execute(new Handler(serverSocket.accept()));
 *       }
 *     } catch (IOException ex) {
 *       pool.shutdown();
 *     }
 *   }
 * }
 *
 * class Handler implements Runnable {
 *   private final Socket socket;
 *   Handler(Socket socket) { this.socket = socket; }
 *   public void run() {
 *     // read and service request on socket
 *   }
 * }}</pre>

以下方法分为两个阶段关闭 ExecutorService,第一步通过

shutdown 来拒绝传入的任务,然后调用 shutdownNow ,如果必要的话,可以用来取消任何延迟任务。

 *  <pre> {@code
 * void shutdownAndAwaitTermination(ExecutorService pool) {
 *   pool.shutdown(); // 禁止提交新任务
 *   try {
 *     // 等待现有任务终止
 *     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
 *       pool.shutdownNow(); // 取消当前正在执行的任务
 *       // 等待一会让任务来反馈是否被取消了
 *       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
 *           System.err.println("Pool did not terminate");
 *     }
 *   } catch (InterruptedException ie) {
 *     // (重新)取消如果当前线程被中断
 *     pool.shutdownNow();
 *     // 保留当前线程中断状态
 *     Thread.currentThread().interrupt();
 *   }
 * }}</pre>

内存一致性效果:和executor一样。

方法

todo 最近时间比较紧,尽力而为

Spread the love

转载请注明链接地址: » executorService

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏