美文网首页
为什么局部变量是线程安全的?

为什么局部变量是线程安全的?

作者: woshishui1243 | 来源:发表于2019-11-28 17:33 被阅读0次

局部变量不存在数据竞争的,但是至于原因嘛,就说不清楚了。那它背后的原因到底是怎样的呢?要弄清楚这个,你需要一点编译原理的知识。你知道在 CPU 层面,是没有方法概念的,CPU 的眼里,只有一条条的指令。编译程序,负责把高级语言里的方法转换成一条条的指令。所以你可以站在编译器实现者的角度来思考“怎么完成方法到指令的转换”。


方法的调用过程

方法是如何被执行的
方法调用的过程想必你已经清楚了,但是还有一个很重要的问题,“CPU 去哪里找到调用方法的参数和返回地址?”如果你熟悉 CPU 的工作原理,你应该会立刻想到:通过 CPU 的堆栈寄存器。CPU 支持一种栈结构。因为这个栈是和方法调用相关的,因此经常被称为调用栈。每个方法在调用栈里都有自己的独立空间,称为栈帧, 每个栈帧里都有对应方法需要的参数和返回地址。当调用方法时,会创建新的栈帧,并压入 调用栈;当方法返回时,对应的栈帧就会被自动弹出。也就是说,栈帧和方法是同生共死 的。


调用栈结构

局部变量存哪里?
局部变量的作用域是方法内部,也就是说当方法执行完,局部变量就没用了,局部变量应该和方法同生共死。事实上,局部变量就是放到 了调用栈里。


保护局部变量的调用栈结构

调用栈与线程
每个线程都有自己独立的调用栈。因为如果不是这样,那两个线程就互相干扰了。

相关文章

  • 【高并发】面试官问我:为什么局部变量是线程安全的?

    写在前面 相信很多小伙伴都知道局部变量是线程安全的,那你知道为什么局部变量是线程安全的吗? 前言 多个线程同时访问...

  • 为什么局部变量是线程安全的?

    局部变量不存在数据竞争的,但是至于原因嘛,就说不清楚了。那它背后的原因到底是怎样的呢?要弄清楚这个,你需要一点编译...

  • Java笔记

    方法中的局部变量是肯定没有安全的问题的,除非你把局部变量用引用传值给多个子线程。 方法中的局部变量是属于每个线程栈...

  • 线程安全和共享资源

    什么是线程安全可以被多线程同时执行的代码叫做线程安全的代码 共享资源局部变量局部对象的引用对象成员 所以,了解到某...

  • 多线程-了解(二)

    1.线程安全与线程共享 允许被多个线程同时执行的代码称为线程安全代码。 局部变量:存储在自己的栈中,永远不会被共享...

  • [并发]局部变量是线程安全的

    所有函数内定义的局部变量都是线程安全的,可以随便使用。但是最可怕的就是你不知道框架做了单例处理,结果里面写的成员变...

  • iOS-线程安全探究

    为什么CFRunLoopRef是线程安全的,而基于此的NSRunLoop却不是线程安全的呢? 线程安全时多线程领域...

  • 一篇面试了无数公司后总结的面试题,学完面试不上我把工资卡给你

    1、什么是线程局部变量? 线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供...

  • ThreadLocal

    定义:线程的局部变量;在多个线程中,分别有独立的值(副本)。特点:线程安全、无额外开销(快速)原理:java中用h...

  • Linux线程局部变量实现

    Linux线程局部变量实现 什么是线程局部变量,就是每个线程各自拥有一个的变量;比如errno,是每个线程各自拥有...

网友评论

      本文标题:为什么局部变量是线程安全的?

      本文链接:https://www.haomeiwen.com/subject/bjobwctx.html