フランキー:
Javaソースコード、我々はそれを持っています
// 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
な変更を。
TALEX:
ファイル内のOpenJDKのソースコードでhotspot/src/share/vm/classfile/javaClasses.cpp
は、次のコードを見ることができます:
// 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);
}
}
状態はネイティブコードで管理されているように見えます。それはあなたがJavaコードからその変化を傍受できないことを意味します。