美文网首页
Executor简介-笔记

Executor简介-笔记

作者: 键盘车神 | 来源:发表于2018-08-08 18:14 被阅读0次

    1.Executor执行提交的线程任务,解耦任务的提交和执行,通常用于替代明确地创建线程

    Executor executor = anExecutor;
    executor.execute(new RunnableTask());
    
    new Thread(new RunnableTask()).start();
    

    2.Executor不要求必须异步执行任务,可以立即执行提交的任务

    new Executor() {
        @Override
        public void execute(Runnable command) {
            command.run();
        }
    };
    

    3.Executor在任务的调度上利用某种限制实现不同的执行策略。例如下面的按顺序调度任务执行

    class SerialExecutor implements Executor {
        final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
        final Executor executor;
        Runnable active;
    
        SerialExecutor(Executor executor) {
            this.executor = executor;
        }
    
        public synchronized void execute( final Runnable r) {
            tasks.offer(new Runnable() {
                public void run() {
                    try {
                        r.run();
                    } finally {
                        scheduleNext();
                    }
                }
            });
            if (active == null) {
                scheduleNext();
            }
        }
    
        protected synchronized void scheduleNext() {
            if ((active = tasks.poll()) != null) {
                executor.execute(active);
            }
        }
    };
    

    4.Executor接口相关类的介绍

    Executor.png
    1. ExecutorService 继承Executor,相比于Executor,提供了生命周期的管理以及使用Future跟踪异步任务的运行。

    2.AbstractExecutorService 抽象类,实现了ExecutorService的submit方法。

    3.ScheduledExecutorService 可调度的执行器,能根据给定的延迟执行任务或周期性的执行任务。

    4.ThreadPoolExecutor 线程池,提供了一系列的静态工厂方法创建不同的线程池并返回一个ExecutorService对象。

    5.ScheduledThreadPoolExecutor 可调度的线程池执行器。多个任务调度时比java.util.Timer更好

    PS:Timer单线程执行任务,多个任务执行时,可能会干扰导致任务延迟,导致没有按照预期执行;Timer不捕获异常,如果某个任务执行时抛出了UncheckedException,会导致所有任务取消退出执行;Timer是基于系统时间,如果中途修改系统时间,任务会按照系统时间来严格执行;

    相关文章

      网友评论

          本文标题:Executor简介-笔记

          本文链接:https://www.haomeiwen.com/subject/jbpovftx.html