在多核处理器环境中,可以有多个线程 运行 在同一给定时间使用相同的静态方法

In a multicore processor enviroment, can there be multiple threads running the same static method at the same given time

我看过这个问题 Static method behavior in multi-threaded environment in java.
但是这个问题没有回答可以multi-thread运行宁相同的方法相同的给定时间 多核 处理器环境。
如果我的标题问题是 "yes",我的计算机究竟是如何实现的?由于只有一个静态方法等待调用。
两个内核是否分别将该静态方法复制到它们的内核内存中,并运行它们同时分别复制?
不知道我表达清楚没有。如果没有,我非常愿意解释。谢谢。

独立执行一段代码所需的所有信息都本地存储在 线程 中。当一个核心执行一个方法时,它是在线程的上下文中执行的。由于实际的可执行代码(指令)无法更改(不可写),因此无需将其复制到任何地方:它可以在 threads/cores.

之间共享

方法可以有局部变量。这些都存储在栈上,也就是线程的一个属性。每个线程都有一块单独的内存用于其堆栈,因此每个核心将访问不同的内存用于局部变量。

对于堆上的数据,这是共享的,这就是为什么在通过协调访问(例如,通过使用 synchronized)在多线程环境中访问它时必须小心。

静态与否无关紧要。在任何一种情况下,都只有一个代码副本。一个非静态方法可以有对象数据的多个实例(因此可能不同的核心将访问不同的堆数据,尽管不是必须的)和一个静态方法访问静态数据(这是共享的,你必须协调).

核心可以将可执行代码复制到本地缓存中执行,但这样做是出于性能原因,而不是因为任何共享性问题。

快速回答:是的。

如果您在单进程中谈论多线程,那么两个线程将 运行 基于线程优先级的静态方法。但是,如果您谈论的是多处理器多线程环境,那么是的,在多核处理器环境中,同一给定时间的相同静态或非静态方法可以 运行。因为每个进程都会 运行 进入不同的 JVM 环境。

简短的回答,是的,这是可能的。

每个方法调用都将获得自己的堆栈,并且可以运行 并行。

要调用的静态方法只是一组可执行语句。由于不允许线程写入方法逻辑,因此每个线程都引用同一组指令。它还有一个指针(有点),它告诉它从指令中执行哪一行。

从 class/object 的角度考虑一下。相同 class 的所有对象共享相同的代码库,但这是否意味着不能同时创建 2 个对象?

该实例指的是同一个对象,但与另一个实例不同。

同理,2个方法调用引用同一组指令,但数据不同(它们在哪条指令上,局部变量的值是什么等)。

我认为您的困惑是因为该方法是静态的(因此您的假设只有一个副本)。副本保持不变,并不意味着每次调用方法时,都必须复制指令。区分指令和数据,这将有所帮助。