b站极海大佬的视频,简单的讲了一下整个过程 :
虚拟化出来一个平台线程(VT),这个平台线程跟操作系统的内核线程(OS Thread)是相关的,具体的虚拟线程是由这个平台线程去做调度.
在jdk层面调度的逻辑 :
如果创建了一个虚拟线程,我们可以把它挂载,或者叫做安装到这个平台线程上,然后再由这个平台线程绑定的内核线程去做调度,多个虚拟线程就可以对应同一个平台线程.假如某一个虚拟线程遇到了一些IO的事件要去等待,阻塞的时候,它就可以让出资源,让这个平台线程再去调度其他的虚拟线程.在程序看来,每一个虚拟线程他有自己的同步代码块,自己的堆栈(栈).这个线程的上下文和它的调度就不是由操作系统直接去接管,而是由jdk里面它自己的调度器去进行调度的.Java虚拟机怎么去保证每一个虚拟线程它自己的上下文切换和它自己的现场的保护,被平台线程接管了之后,那空闲这个虚拟线程它会把它的栈空间移动到堆上面去,然后这个平台线程再去装载其他的虚拟线程,要去恢复其他虚拟线程的一个栈空间,只要把它从堆上面再复制回来.