多线程如何并行执行同一个方法?基于Spring单例Bean场景的疑问
Spring单例无状态Bean处理多请求的疑问
我在阅读一篇关于Spring单例、无状态Bean如何处理多个请求的文章时,被这个问题难住了。
以下是作者关于实现方式的核心观点:
当线程请求单例Bean时,会通过栈中的引用变量指向堆中单例Bean的字节码。因此多个线程可以同时引用单例Bean,编译器会指向同一字节码执行,并将方法特定值分别存储在栈的对应块中。
这篇文章质量不错,但缺少线程执行JVM字节码的具体细节。我的理解是:
- 每个线程都有自己的栈,栈包含栈帧,栈帧包含返回值、局部变量、操作数栈和当前类常量池引用。
- 所有类都加载到方法区,每个类数据存储常量和方法代码,因此方法代码仅存在于一处。
- 方法的某一行(即JVM中的字节码)同一时间只能由一个线程在CPU的一个核心上执行;同一行方法代码无法同时由两个不同线程在两个不同核心上执行,但方法中的不同代码行可以由两个不同线程在两个不同核心上同时执行。
- 只要没有其他线程在执行方法的第一行,每个线程都可以开始执行该方法。
内容的提问来源于stack exchange,提问作者vpxfhu77
相关产品推荐
相关产品推荐

