【发布时间】:2013-06-15 15:20:43
【问题描述】:
Java Thread 对象和操作系统线程(轻量级进程)之间是否存在一对一的映射关系。也就是说,如果我有一个Thread 对象,我是否可以始终准确地识别一个关联的操作系统线程,并且我是否始终拥有相同的关联操作系统线程?一般来说,这取决于操作系统和 JVM,所以我将把问题限制在使用 Oracle 和 Open JDK JVM 的 Linux 上。
sleeping 或waiting 线程的情况如何?以及尚未开始运行的线程和已完成运行的线程的极端情况?
【问题讨论】:
-
Linux 并没有真正的“LWP”;所有执行线程都是用不同参数调用
clone(2)的结果 -
关于“我能始终准确地识别一个关联的操作系统线程吗”答案是肯定的;否则
Thread保证无法兑现(考虑线程本地存储) -
Java
Threads 可以并且已经(绿色线程)在没有操作系统线程的情况下实现,因此操作系统线程不需要提供Thread保证。
标签: java linux multithreading