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