如果在多核或多处理器机器上运行,其中jvm可能绝对同时运行多个线程(不只是同时发生),那么api方法java.lang.Thread.currentThread()
会返回什么?....在上述场景中,它只是随机返回一个当前线程?多核/多处理器系统上Thread.currentThread()的语义?
回答
它返回当前正在运行的线程内。如果您有两个核心和两个线程A
和B
完全同时运行,同时调用此方法,它将适当地返回A
和B
。
您的理解是种类正确的 - 此方法返回的线程始终运行 - 因为它必须从某个线程调用并且为了返回,它必须正在运行。不要在以下方面考虑此方法:“所有当前正在运行的,未暂停的,未被阻止的线程”。相反,其含义是:“给我一个参考运行我的线程”。
这对我来说非常有意义,谢谢 –
它非常有意义。它返回一个对执行调用代码的线程的引用。
所以,假设你有两个线程,threadA
和threadB
。如果在threadA
中运行的代码调用currentThread()
,则将返回threadA
。同样,如果在threadB
中运行的代码调用currentThread()
,则返回threadB
。
documentation在我看来很弱。它指出:
返回对当前正在执行的线程对象的引用。
此处“目前”的使用非常差。目前经常被解释为“在这个瞬间”。这是什么让你困惑。 (!)
而讽刺的是,MSDN文档,使一个更好的刺吧:
获取
Thread
对象正在调用当前代码块。
但他们仍陷入使用“电流”的陷阱。哦,写技术文档的陷阱!
我完全不得不以这种方式改变我对静力学的看法,谢谢 –
这是一个非常有同情心的更新,谢谢! –
java.lang.Thread.currentThread()
返回执行保存代码的方法的线程。
这并不意味着没有其他线程在同一时间运行。
如果你想看到的差异,您可以在当前运行的所有线程重复着这片代码:
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getState()==Thread.State.RUNNABLE) {
// see !
}
}
(或简称count them)
它返回对当前正在执行的线程对象的引用。
参见:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
这个API方法java.lang.Thread.currentThread()返回只有一个线程不再有意义
它只有道理的,如果你有多个线程。它返回当前运行代码的线程。你无法获得任何其他方式的东西。
jvm has the potential to run more than one thread absolutely simultaneously
是的,这是事实。在多核/多处理器系统中,可能有多个当前正在运行的线程。在每个系统上都有一些后台线程在JVM中运行,即使在single processor
系统中也是如此。
方法java.lang.Thread.currentThread()
的用途是返回运行当前调用方法的代码的Thread对象。
- 1. 多核处理器上的多线程
- 2. 在多核处理器上实时操作系统中的多线程调度
- 3. pthread_singal在多处理器系统上唤醒多个线程
- 4. 多核处理器上的Android错误
- 5. 同步在多处理器系统
- 6. Win32:计算多核/多处理器系统中的线程CPU利用率
- 7. 多核处理器的多线程
- 8. 教堂,语言环境和多核多处理器机器
- 9. 多核系统上的Netfilter钩子
- 10. 单处理器系统上的多线程powershell脚本
- 11. 多处理器系统上的POSIX线程
- 12. 有关多核处理器与单核多处理器的说明
- 13. 多核心处理器上有多少个CS:EIP寄存器?
- 14. 单处理器vs双核系统上的进程状态
- 15. 多线程可以在单处理器系统上实现吗?
- 16. 如果有多个处理器,Thread.currentThread()如何工作?
- 17. 多处理器和多线程 - 操作系统
- 18. 多核和操作系统
- 19. Python:多核处理?
- 20. 在多处理器和多核系统上,不可分割的操作仍然不可分割吗?
- 21. 在双核处理器上执行2个操作系统
- 22. 处理多个登录系统
- 23. 多核心处理器中的线程
- 24. 多核处理器之间的区别
- 25. 哪个处理器会在多核系统中执行硬件中断
- 26. 流多处理器,每个流处理器的核心cuda
- 27. i7处理器与Windows8操作系统的多线程问题操作系统
- 28. Linux操作系统:系统()+ SIGCHLD处理多线程+
- 29. 多租户,多语种系统的报告系统
- 30. 如何在webRTC多对多系统上处理socket.io多个连接?
'Thread.currentThread()'返回一个对你正在调用'Thread.currentThread()'的线程的引用。 –