我想知道java线程启动方法内部能够创建新线程的内容是什么?
答案 0 :(得分:2)
这是一个本机方法,这意味着它不是用Java本身实现的,而是用C ++实现的。
在JVM簿记之外,它的确做什么取决于JVM运行的平台;在Linux上,它会直接运行pthread_create()
或clone()
。我不知道Windows的替代品是什么。
Java隐藏了你的底层机制有两个主要原因:部分是为了让你更容易编写Java程序而不必知道它们将运行的操作系统,作为一个抽象和服务给你;但部分原因还在于能够直接调用这些本机功能会破坏Java所强加的安全模型,因此,如果没有明确的权限,也不能确保任何Java程序都无法做任何事情。
最后,我不确定你问的确切原因,所以我不确定我是否真的在回答你的问题。
答案 1 :(得分:1)
具体答案是不可能的,因为它因平台而异(很久以前有Green threads而且一切都很清楚 - 它们的运行时间为user level threads)。从那时起,他们已被Native线程替换为“优化”。也就是说,删除了绿色线程以支持本机操作系统的惯用线程模型。无论如何,本机代码最终会调用您编程的run
方法。
答案 2 :(得分:1)
与Java中的任何其他内容一样,通过 start()方法创建线程涉及 JVM 。 Java虚拟机通常在您的方法调用和底层操作系统之间充当中介。这确保了Java环境(大致)以相同的方式运行,而不管操作系统如何(=>着名的Java可移植性)。但它幕后的作用(即在JVM的内部)有所不同,取决于它在上运行的实际操作系统。
例如,创建一个线程调用Unix OS上的 pthread_create 函数(POSIX线程调用),或Windows系统上的 CreateThread 函数(来自Win32 API)。这被Java虚拟机称为,因此您不必这样做。
这些功能仅仅是一些例子。取决于特定的JVM实现(对于不同的操作系统,请注意),start()方法可能会做其他魔术。
然而,原则保持不变。 start()方法调用您的特定操作系统本机支持创建线程的某些。