Java创建的线程到底是用户级线程(ULT)还是内核级线程(KLT)详解
1.线程的理解
(1. 线程是调度CPU最小单元,也叫轻量级进程LWP(Light weight process)
(2. 分为两种线程模型:用户级线程(ULT),内核级线程(KLT)
用户级线程(ULT):用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程函数来控制用户线程。不需要用户态/核心态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它所有的线程)阻塞
内核级线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程组设不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行线程的创建、调度和管理由内核完成,效率要比ULT慢,比进程操作快。
- 看到这里大家可以猜一下Java线程池是哪一种线程呢?
揭晓答案之前我们来做个小实验,开整!
创建300个java线程,代码如下:
public class ThreadTest {
public static void main(String[] args) {
for(int i=0 ; i <300 ;i++){
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在执行任务");
while (true){
}
}
});
thread.start();
}
}
}
未开始创建java线程之前:
创建300个线程之后:
大家发现了什么,是不是cpu 线程涨了三百多,这就证明java线程是内核级线程(KLT)