Executor

作者: 吉利蛋shysam | 来源:发表于2019-02-28 11:21 被阅读0次

是一个接口,并有一个方法。定义了所有实现Executor的对象,都提供将"任务提交"和"任务运行机制"分离的execute方法。一般来说,使用Executor的executor方法执行任务。而不用new Thread的方法。

但是这个方法并没有要求execute在异步执行,最简单的情形就是在调用者的线程运行。

    class DirectExecutor implements Executor {
        public void execute(Runnable r) {
            r.run();
        }
    }

也可以在其他线程运行

    class ThreadPerTaskExecutor implements Executor {
        public void execute(Runnable r) {
            new Thread(r).start();
        }
    }

也可以对任务进行限制和安排

    class SerialExecutor implements Executor {

        final Queue<Runnable> tasks = new ArrayDeque<>();
        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);
            }
        }

    }

ExecutorService是一个扩展接口,规定了一些更具体的功能。而ThreadPoolExecutor用线程池的方式实现了ExecutorService。Executors是一个工厂类,提供了各种Executor,也有熟悉的线程池。

总的来说,这个接口是一个顶层接口,目的是分离任务提交和任务的执行机制,具体什么机制需要去实现,其中API中的线程池就是有实现这个接口,实现了池的任务执行机制。

相关文章

网友评论

      本文标题:Executor

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