当有多个处理器时,Thread.currentThread()如何工作?

时间:2015-05-04 07:16:47

标签: java multithreading multicore

Thread.currentThread()可用于获取当前正在执行的线程。而且我认为sleep和yield方法都是静态的,因为它们无法在其他线程上执行睡眠或屈服。因此,通过使它们静态,它将睡眠或仅产生当前正在执行的线程。

这似乎在单处理器系统中工作,如果我调用Thread.currentThread()或睡眠,那么只有当前正在运行的线程,它将返回或它将睡眠。但在多核系统中,多个线程可以同时运行,

那么Thread.sleep()uint16_t如何运作??

4 个答案:

答案 0 :(得分:5)

方法Thread.currentThread()返回我们当前正在运行的线程。这只是一种说法:"嘿,给我一个运行我的线程的参考"

假设我们有四个内核和四个线程A,B,C和D绝对同时运行,同时调用此方法,它将根据我们当前所在的线程适当地返回A,B,C和D. 。

答案 1 :(得分:4)

在这种情况下,文档很差。 Thread.currentThread()返回的内容实际上是执行该行代码的线程。因此,无论您是否处于多处理器环境中,都无关紧要。

如果有两个线程ThreadAThreadB并行运行,并且同时并行请求Thread.currentThread(),则会获得执行此操作的相应线程。< / p>

答案 2 :(得分:3)

这些方法是静态的,因为您可以访问正在执行该代码的核心/ CPU的当前执行线程

如果有多个核心或CPU处理器,则通过此代码的每个核心都将返回给您自己的线程。

因此,您无需关心系统中有多少核心/ CPU,这些方法可以在单核和多核系统的两种情况下使用。

请记住,Java Thread是操作系统真实线程(posix,windows ...)的抽象,因此您可以在不关心操作系统架构的情况下编写程序代码。

答案 3 :(得分:1)

它仅适用于“当前”线程。在多核系统中,如果您的代码是单线程的,则只有一个线程正在运行,这是当前的线程,因此该代码将在该线程上运行。如果你有多线程程序,这个代码将在它被调用的线程中工作。核心数量并不重要。 Java将线程和负载分配给不同的内核,但从代码的角度来看,处理器的数量并不重要。