Java并发 -- 局部变量

栏目: Java · 发布时间: 7年前

int a = 7;
int[] b = fibonacci(a);
int[] c = b;

Java并发 -- 局部变量

  1. 当调用fibonacci(a)的时候,CPU需要先找到方法fibonacci()的地址,然后跳转到这个地址去执行代码
  2. 最后CPU执行完fibonacci()方法之后,要能够返回,需要找到调用fibonacci()方法的下一条语句的地址
  3. 即int[] c = b;然后跳转到这个地址去执行

栈寄存器

Java并发 -- 局部变量

  1. CPU支持一种 栈结构 ,与 方法调用 相关,称为 调用栈 ,Java虽然靠JVM解释执行,但方法调用也是利用 栈结构 来解决的
  2. 有三个方法A、B、C,调用关系为A->B->C,在运行时会构建出类似上图的调用栈
  3. 每个方法在调用栈里都有自己的 独立空间 ,称为 栈帧 ,每个 栈帧 都有 对应方法所需要的参数返回地址
  4. 调用 方法时,会 创建 新的栈帧,并 压入 调用栈,当方法 返回 时,对应的栈帧会被 自动弹出 ,即 栈帧与方法是同生共死的

局部变量

Java并发 -- 局部变量

  1. 局部变量的作用域是 方法内部 ,所以 局部变量 应该与方法同生共死,另外调用栈的 栈帧 和方法也是同生共死的
  2. 因此, 局部变量是放在调用栈的栈帧里的

调用栈与线程

Java并发 -- 局部变量

  1. 每个线程都有 独立的调用栈
  2. 局部变量保存在线程各自独立的调用栈里(栈帧),不会在线程间共享,因此 局部变量没有并发问题

线程封闭

  1. 局部变量的思路是解决并发问题的一个重要技术: 线程间不共享 ,更专业的名词叫 线程封闭 仅在 单线程 内访问数据
  2. 数据库连接池
    • 通过线程封闭技术,保证一个Connection一旦被一个线程获取之后,在这个线程关闭Connection之前
    • 不会再分配给其他线程,从而保证了Connection不会有并发问题

转载请注明出处:http://zhongmingmao.me/2019/04/30/java-concurrent-local-var/

访问原文「Java并发 -- 局部变量」获取最佳阅读体验并参与讨论


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

A Philosophy of Software Design

A Philosophy of Software Design

John Ousterhout / Yaknyam Press / 2018-4-6 / GBP 14.21

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first ......一起来看看 《A Philosophy of Software Design》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具