java.lang.Threadの - threadStatusはどこから来るのでしょうか?

フランキー:

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コードからその変化を傍受できないことを意味します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=168482&siteId=1