我不知道Java如何生成新线程。我查看了JDK中的Thread类,init
方法可能是关键方法。看来JVM做了一些工作?新的Thread似乎与它的父级在同一个ThreadGroup中。但我不确定。所以我想知道Java生成新线程的确切流程吗?形成JVM或其他机制?以及如何从操作系统获取资源?你能给我一些文件或网站吗?
答案 0 :(得分:1)
这可能是JVM特定的,但它在Hotspot JVM中的工作原理:
1)首先创建一个Thread
对象,它只是一个普通的Java对象,设置本机线程所需的整个状态:线程本地存储,缓冲区,堆栈,程序计数器等。
2)有了这个,JVM就可以创建一个本机线程。 JVM具有Thread
对象和本机线程的映射,因此当Thread
对象停止时可以停止本机线程。
3)正如您所看到的那样,它只是一个本机操作系统线程,因此操作系统负责调度。
4)当run()
方法退出时,您可能会遇到未捕获的异常,因此JVM需要检查是否需要终止它。如果没有发生异常,则回收Thread
对象和本机线程的所有资源。
答案 1 :(得分:-1)
更多信息:
优秀的JVM&线程内部细节在此处:http://blog.jamesdbloom.com/JVMInternals.html
线程是程序中执行的线程。在Hotspot JVM中,Java Thread和本机操作系统Thread之间存在直接映射。准备好Java线程的所有状态(如线程本地存储,分配缓冲区,同步对象,堆栈和程序计数器)后,将创建本机线程。一旦Java线程终止,就会回收本机线程。因此,操作系统负责调度所有线程并将它们分派给任何可用的CPU。一旦本机线程初始化,它就会调用Java线程中的run()方法。当run()方法返回时,处理未捕获的异常,然后本机线程确认JVM是否需要由于线程终止而终止(即它是最后一个非deamon线程)。当线程终止时,释放本机和Java线程的所有资源。