多线程总结 - worldgreen/freamwork-test GitHub Wiki

  1. 实现多线程的方式
  • 实现 runnable 接口, 可以继承其他类,可以共享一个runnable,
  • 继承 Thread 类,重写 run 方法
  • 实现 Callable 接口,执行返回一个Future,通过 get() 拿到结果
  1. Callable的实现原理,get() 为什么会阻塞
    public Future<?> submit(Runnable task) {
        if (task == null) throw new NullPointerException();
        RunnableFuture<Void> ftask = newTaskFor(task, null);
        execute(ftask);
        return ftask;
    }
  • 在submit内部,把callable转换为runnable,execute 执行FutureTask的run方法。
  • FutureTask
    • callable, outcome结果,runner 执行 callable的线程,waiters等待队列
    • run
      • 把runner设为当前线程,执行完后结果付给cotcome,并唤醒waiters中阻塞的线程
    • get
      • 如果任务没执行完后,
⚠️ **GitHub.com Fallback** ⚠️