虚拟线程具体是由什么线程调度的问题
Topic source它没有使用ThreadPerTaskExecutor
平台线程的ThreadPerTaskExecutor,创建的api是这样的
public static ExecutorService newThreadPerTaskExecutor(ThreadFactory threadFactory)
要求传递一个ThreadFactory来为每个任务创建一个线程
newVirtualThreadPerTaskExecutor
使用的Factory是
Thread.ofVirtual().factory()
用这个工厂为每个任务创建一个虚拟线程
这些虚拟线程底层使用的平台线程仍然来自于ForkJoinPool
在虚拟线程里打印 Thread.currentThread(),可以看到 VirtualThread[#204]/runnable@ForkJoinPool-1-worker-9
我看了一圈,并没有找到真正能修改虚拟线程基于的平台线程的api,可能是JDK不允许自主修改平台线程
- 1
大风起兮
> 直接调用start()实际上是由ForkJoinPool的线程来调度的。我们也可以自己创建调度线程,然后运行虚拟线程
这里好像有点问题,我看了这个方法的源码
它本质上使用的是
来为每一个任务创建一个虚拟线程
其中的schedule默认是null,仍然是使用ForkJoinPool的线程来进行调度
API里并没有找到对外暴露的,可以自己创建调度线程的方法