多线程总结 - worldgreen/freamwork-test GitHub Wiki
- 实现多线程的方式
- 实现 runnable 接口, 可以继承其他类,可以共享一个runnable,
- 继承 Thread 类,重写 run 方法
- 实现 Callable 接口,执行返回一个Future,通过 get() 拿到结果
- 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
- 如果任务没执行完后,