Thread.currentThread()。getId()和Kernel32.INSTANCE.GetCurrentThreadId()之间的区别

时间:2016-05-25 05:58:43

标签: java multithreading

获取线程ID的以下两行代码有什么区别?

Thread.currentThread().getId();
Kernel32.INSTANCE.GetCurrentThreadId();

2 个答案:

答案 0 :(得分:1)

Kernel32.INSTANCE.GetCurrentThreadId();

检索调用线程的线程标识符。这适用于Win32上的本机线程。它们是由操作系统安排的。

Thread.currentThread().getId();

获取Java线程的id。他们是由jvm安排的。它们是否直接映射到本机线程取决于jvm。 (但通常,他们是)

答案 1 :(得分:1)

要抽象底层平台,jvm位于操作系统之上。 W32API是由java实现的OS接口/库,Kernel32.INSTANCE.GetCurrentThreadId()给出了调用该行的操作系统线程的id。 Java语言提供了多线程的机制。 Thread.currentThread().getId()为您提供了jvm线程的id。 根据W32API的实现 - 其中Kernel32是一个 - 可能是一些其他因素,OS线程可能会或可能不会映射到vm线程。