有人知道,在java中Thread.sleep背后的逻辑是什么? 。他们是否使用计时器
答案 0 :(得分:4)
嗯,你也可以看看http://openjdk.java.net。对于ver。 7 jvm.cpp中有一些有趣的代码:
JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis))
JVMWrapper("JVM_Sleep");
if (millis osthread()->get_state();
thread->osthread()->set_state(SLEEPING);
os::sleep(thread, MinSleepInterval, false);
thread->osthread()->set_state(old_state);
}
} else {
ThreadState old_state = thread->osthread()->get_state();
thread->osthread()->set_state(SLEEPING);
if (os::sleep(thread, millis, true) == OS_INTRPT) {
// An asynchronous exception (e.g., ThreadDeathException) could have been thrown on
// us while we were sleeping. We do not overwrite those.
if (!HAS_PENDING_EXCEPTION) {
// TODO-FIXME: THROW_MSG returns which means we will not call set_state()
// to properly restore the thread state. That's likely wrong.
THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted");
}
}
thread->osthread()->set_state(old_state);
}
JVM_END
答案 1 :(得分:1)
你似乎要问的Thread.sleep()
背后的“逻辑”将在操作系统内核或系统库中实现。
因此,“逻辑”可能与操作系统不同。对于Linux,BSD或OpenSolaris等开源操作系统,您可以深入研究操作系统源代码来解决这个问题。对于封闭源操作系统,您可能需要采用逆向工程。
无论哪种方式,实现“逻辑”(例如,它是否使用计时器)可能因操作系统和操作系统以及操作系统版本而异。
答案 2 :(得分:0)
如果用“逻辑”表示“内部如何Thread.sleep()
实现”,那么它是一种本机方法,这意味着它依赖于平台和JVM实现。我希望大多数实现都依赖于底层操作系统提供的线程机制。