💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## Java线程是如何实现的? 当我们追踪Java线程的实现时,可以发现Thread类的start方法最后会运行一个start0方法,而这个方法是native的,也就是交由JDK来实现的(JDK会屏蔽调底层操作系统的差异,提供给Java开发者一套通用的线程接口) ![](https://img.kancloud.cn/c3/9c/c39c09e3679345c086a6a03f3395845e_1590x1386.png) 而要搞清楚这个问题的答案,首页我们得对线程的实现有一定的了解。 线程的主要实现方式有3种(线程模型),分别是使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。 ## 使用内核线程实现 ![](https://img.kancloud.cn/46/c2/46c24bd8a92de971fba63f97cba705ee_1710x1376.png) * 优点: 一个线程被阻塞也不会影响整个进程工作。 * 缺点: 1. 各种线程操作(如创建、析构及同步等)都需要进行系统调用,性能消耗高在用户态和内核态来回切换。 2. 线程和内核线程一比一,内核线程也是要消耗资源的(如内核线程栈空间),所以支持的数量是有限的。 ## 使用用户线程实现 ![](https://img.kancloud.cn/b6/e2/b6e2895f16b190f06aa708a751486012_1704x1144.png) * 优点: 用户线程的创建、同步、销毁及调度完全是在用户态中完成,不需要切换到内核态,因此操作是快速且低消耗的。 * 缺点: 因为没有内核的支持,线程的所有操作都需要用户程序自己实现,实现异常复杂。操作系统只把处理器资源分配到进程,“阻塞如何处理”,“多处理器系统如何将线程映射到其他处理器上”这类问题,甚至不可能解决。 ## 使用用户线程加轻量级经常混合实现 ![](https://img.kancloud.cn/30/da/30da7a374ba329b62836c9e1968e5cee_1704x1368.png) * 优点: 混合前2种的优点; 用户线程操作快速且低消耗,支持更多的并发;一个线程阻塞也不会导致整个进程阻塞。 * 缺点: 实现相对复杂,且需要操作系统对应支持。 ## Java线程的实现 ![](https://img.kancloud.cn/20/4b/204ba552ae0f1a24d43c83e38ec68cc0_1476x838.png) ## Java线程的调度 ![](https://img.kancloud.cn/dc/11/dc114872bef8b6b0afffbfdc01960e08_1398x958.png) ## 参考文档 * 书籍:周志明 *《深入理解Java虚拟机》