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

Lio*_*Lai 1 java cpu multithreading multicore

在java中的多线程环境中读过这个问题的 静态方法行为.
但是这个问题没有回答可以在多核处理器环境中在同一给定时间运行相同方法的多线程. 如果我的标题问题是"是",我的计算机究竟是如何实现的呢?因为只有一个静态方法等待调用. 两个核心分别将静态方法复制到它们的核心ram并分别同时运行它们吗? 我不知道我是否清楚表达了我的观点.如果没有,我非常愿意解释它.谢谢.


rgh*_*ome 8

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

方法可以有局部变量.它们存储在堆栈中,这是线程的属性.每个线程的堆栈都有一个单独的内存,因此每个内核将访问不同的内存以获取本地变量.

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

静态或不静态是不相关的.在任何一种情况下,只有一个代码副本.非静态方法可以有多个对象实例(因此可能不同的内核将访问不同的堆数据,但不一定),静态方法访问静态数据(共享,你必须协调) .

核心可以将可执行代码复制到本地缓存以供执行,但这是出于性能原因而不是因为可共享性的任何问题而完成的.

快速回答:是的.