zoukankan      html  css  js  c++  java
  • java执行器

    Executor

      执行已提交的 Runnable 任务对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。Executor 接口并没有严格地要求执行是异步的。

    public interface Executor {
        void execute(Runnable command);
    }

    ExecutorService

      ExecutorService是Executor的子类,扩展了更多的方法。提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。 可以关闭 ExecutorService,这将导致其拒绝新任务。

      提供两个方法来关闭 ExecutorService。 shutdown()方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务的启动并试图停止当前正在执行的任务。

         关闭任务执行,已经提交的会等执行完再关闭*/
        void shutdown();
    
        /**
         * 立即关闭任务执行*/
        List<Runnable> shutdownNow();
    
        /**
         是否被shutdown*/
        boolean isShutdown();
    
        /**
           在shutdown方法被调用后,如果所有任务结束则返回true*/
        boolean isTerminated();
    
        /**
        在shutdown方法被调用后,阻塞直到所有任务完成。可以设置timeout时间,如果超时,返回false。
    */ boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;

       提供三个方法来跟踪一个异步任务执行。

    /**
         * 执行一个callable,返回一个future*/
        <T> Future<T> submit(Callable<T> task);
    
        /**
         * 执行一个callable,返回一个future,通过future的get方法获得result值。*/
        <T> Future<T> submit(Runnable task, T result);
    
        /**
         *执行一个runnable,返回一个future*/
        Future<?> submit(Runnable task);

      提供四个方法来执行批量任务

    /**
         执行多个callable,返回多个future,该方法会一直阻塞到所有任务完成*/
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
            throws InterruptedException;
    
        /**
        执行多个callable,返回多个future,该方法会一直阻塞到所有任务完成,如果timeout,抛出异常,取消尚未执行的任务*/
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                      long timeout, TimeUnit unit)
            throws InterruptedException;
    
        /**
         * 任意一个callable执行成功后返回,取消尚未执行完的任务*/
        <T> T invokeAny(Collection<? extends Callable<T>> tasks)
            throws InterruptedException, ExecutionException;
    
        /**
         * 任意一个callable执行成功后返回,取消尚未执行的任务,如果timeout,抛出异常,取消尚未执行的任务*/
        <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                        long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;

     ThreadPoolExecutor

      ThreadPoolExecutor是ExecutorService的一个实现类,它使用池线程执行每个提交的任务。

      ThreadPoolExecutor内部用一个变量保存了两个内容:所有有效线程的数量各个线程的状态(runState)。

    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

      ThreadPoolExecutor内部有一个队列,当提交任务时,首先会提交到队列中,执行任务时会从队列中获取任务。

      ThreadPoolExecutor将根据corePoolSize(参见 getCorePoolSize())和 maximumPoolSize(参见 getMaximumPoolSize()) 设置的边界自动调整池大小。当新任务在方法 execute(java.lang.Runnable) 中提交时,如果运行的线程少于 corePoolSize, 则创建新线程来处理请求,即使有线程是空闲的。 如果运行的线程多于 corePoolSize 而少于 maximumPoolSize,则仅当队列满时才创建新线程。 如果设置的 corePoolSize 和 maximumPoolSize 相同,则创建了固定大小的线程池。 如果将 maximumPoolSize 设置为基本的无界值(如 Integer.MAX_VALUE),则允许池适应任意数量的并发任务。

  • 相关阅读:
    rabbitmq 学习
    linux下安装rabbitmq 集群
    excel中将时间戳转换为日期格式
    python实现批量修改服务器密码
    python 根据字典的键值进行排序
    python字符串的拼接
    python的变量
    python基础1
    【性能分析】使用Intel VTune Amplifier
    【vim】搜索与替换
  • 原文地址:https://www.cnblogs.com/zhangwanhua/p/7874670.html
Copyright © 2011-2022 走看看