JavaThreadState 和 JVMTIThreadState 转换
下面接着看下jvmti.xml中对于JavaThreadState 和 JVMTIThreadState的转换定义:
The following definitions are used to convert <jvmti/> thread state to <code>java.lang.Thread.State</code> style states.
<constants id="jvmtiJavaLangThreadState" label="java.lang.Thread.State Conversion Masks" kind="bits">
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_MASK"
num="JVMTI_THREAD_STATE_TERMINATED | JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT">
Mask the state with this before comparison
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_NEW"
num="0">
<code>java.lang.Thread.State.NEW</code>
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED"
num="JVMTI_THREAD_STATE_TERMINATED">
<code>java.lang.Thread.State.TERMINATED</code>
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE"
num="JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE">
<code>java.lang.Thread.State.RUNNABLE</code>
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED"
num="JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER">
<code>java.lang.Thread.State.BLOCKED</code>
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_WAITING"
num="JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY">
<code>java.lang.Thread.State.WAITING</code>
</constant>
<constant id="JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING"
num="JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT">
<code>java.lang.Thread.State.TIMED_WAITING</code>
</constant>
</constants>
继续用表格处理,对比下:
序号 | JavaThreadState | JVMThreadState | Value(10进制) |
---|---|---|---|
1 | java.lang.Thread.State.NEW | 0 | |
2 | java.lang.Thread.State.TERMINATED | JVMTI_THREAD_STATE_TERMINATED | 0x0002 = 2 |
3 | java.lang.Thread.State.RUNNABLE | JVMTI_THREAD_STATE_ALIVE 按位或 JVMTI_THREAD_STATE_RUNNABLE | 0x0001 按位或 0x0004 = 5 |
4 | java.lang.Thread.State.BLOCKED | JVMTI_THREAD_STATE_ALIVE 按位或JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | 0x0001 按位或0x0400 = 1025 |
5 | java.lang.Thread.State.WAITING | JVMTI_THREAD_STATE_ALIVE 按位或 JVMTI_THREAD_STATE_WAITING 按位或JVMTI_THREAD_STATE_WAITING_INDEFINITELY | 0x0001 按位或 0x0080 按位或 0x0010 = 145 |
6 | java.lang.Thread.State.TIMED_WAITING | JVMTI_THREAD_STATE_ALIVE 按位或JVMTI_THREAD_STATE_WAITING 按位或JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT | 0x0001 按位或 0x0080 按位或 0x0020 = 161 |