如果在多核或多处理器机器上运行,其中jvm有可能同时运行多个线程(不仅是表面上的同时),那么api方法
java.lang.Thread.currentThread()
返回什么?在上述情况下,它是否只是随机返回当前线程中的一个?java.lang.Thread.currentThread()
返回什么?在上述情况下,它是否只是随机返回当前线程中的一个?该方法返回当前正在运行的线程。如果你有两个处理器核心和两个线程 A
和 B
正在完全并发地运行,同时调用此方法,它将适当地返回 A
和 B
。
你的理解有点正确——此方法返回的线程始终在运行——因为它必须从某个线程中调用,并且为了返回结果,它必须正在运行。不要把这个方法想成是“所有当前正在运行、未暂停、未阻塞的线程”。而是其含义是:“给我一个引用以指向运行我的线程”。
jvm具有绝对同时运行多个线程的潜力
是的,这是真的。在多核/多处理器系统中,可以拥有多个当前正在运行的线程。即使在单处理器
系统上也会有一些后台线程在JVM中运行。
java.lang.Thread.currentThread()
方法的目的是返回正在调用该方法的当前代码所运行的线程对象。
java.lang.Thread.currentThread()
返回执行代码的方法所在的线程。
这并不意味着没有其他线程同时运行。
如果您想看到区别,可以使用以下代码迭代所有当前正在运行的线程:
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getState()==Thread.State.RUNNABLE) {
// see !
}
}
或只需使用计数功能
Thread.currentThread()
返回一个引用,指向你正在其中调用Thread.currentThread()
的线程。 - Eng.Fouad