Executor

141 阅读1分钟

一个用于多线程任务执行的接口,仅有一个方法

    void execute(Runnable command);

有三种调用方式:
1.此处会立即执行,且使用的是调用线程执行

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

2.使用一个新的线程进行执行任务,此处为新线程执行任务,会使线程进行就绪状态,等待cpu执行

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

3.常用执行方式

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);
      }
    }
}