简介
上两篇文章中,我们已经介绍了使用虚拟线程的例程和VirtualThread。接下来,我们继续介绍虚拟线程的调度,即VirtualThread中最重要的两个成员变量Executor scheduler和Continuation cont。
scheduler
创建
scheduler是用于虚拟线程调度的线程池,先看虚拟线程的初始化代码:
VirtualThread(Executor scheduler, String name, int characteristics, Runnable task) {
super(name, characteristics, /*bound*/ false);
Objects.requireNonNull(task);
// 如果入参的scheduler为null,则做默认逻辑
if (scheduler == null) {
Thread parent = Thread.currentThread();
if (parent instanceof VirtualThread vparent) {
// 如果当前线程是虚拟线程,则使用当前线程的scheduler
scheduler = vparent.scheduler;
} else {
// 否则使用全局线程池DEFAULT_SCHEDULER
scheduler = DEFAULT_SCHEDULER;
}
}
this.scheduler = scheduler;
// 初始化Continuation
this.cont = new VThreadContinuation(this, task);
this.runContinuation = this::runContinuation;
}
默认调度器DEFAULT_SCHEDULER其实就是个Fo