JDK8 线程模型
Java 当前默认的是 1:1 内核线程实现
所以基于线程池的逻辑,其线程的数量很少
Java也在尝试新的模型 , 如一个特殊的有栈协程 - 纤程 Fiber
如上文 , 协程需要自己管理自己的现场保护、调度 , 操作系统的内核无法感知到 , 所以这里的逻辑一般都是自己完成实现
Fiber 亦是如此:
- 执行过程 : 维护现场、保护、恢复上下文
- 调度器:负责线程的调度
JDK21 - 虚拟线程(Virtual Threads)
老的调用线程的写法可以修改为:
Thread.ofPlatform().name("thread-test").start(new SimpleThread());
private static class SimpleThread implements Runnable {
@Override
public void run() {
System.out.println("Hello from a thread!");
}
}
虚拟线程和协程 的区别
如上文, 协程是基于编程语言自己的,其上下文切换都是依赖语言自己实现的。
虚拟线程是基于 JVM 实现的 , 所有的 JVM 语言都是可以使用的。
虚拟线程是基于线程的协程实现,调度交给JVM管理。