通过Java source code我们有
// variable not written or updated anywhere on this class
private volatile int threadStatus = 0;
public State getState() {
// get current thread state
return sun.misc.VM.toThreadState(threadStatus);
}
如何更新
threadStatus
?在哪里更新? 想法是最终尝试使用AOP编织更新方法,并对
threadStatus
更改进行回调。 最佳答案
在hotspot/src/share/vm/classfile/javaClasses.cpp
文件的OpenJDK源代码中,您可以看到以下代码:
// Write the thread status value to threadStatus field in java.lang.Thread java class.
void java_lang_Thread::set_thread_status(oop java_thread,
java_lang_Thread::ThreadStatus status) {
// The threadStatus is only present starting in 1.5
if (_thread_status_offset > 0) {
java_thread->int_field_put(_thread_status_offset, status);
}
}
看起来状态是在 native 代码中管理的。这意味着您无法从Java代码中拦截其更改。
关于java - java.lang.Thread-threadStatus来自哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53406078/