第十一讲:为什么局部变量是线程安全的?
方法是如何被执行的
1)第一行,声明一个int变量a;第二行,调用方法fibonacci(a);第三行,将b赋值给c;
2)当调用fibonacci(a)时,CPU要先找到方法地址(0277),然后跳转到地址去执行
代码,最后执行完方法后,要能够返回(0132);
方法与调用栈
1)假如有A、B、C三个方法,调用关系是A->B->C,在运行时,会构建出如下图所
示调用栈,每个方法在调用栈里都有自己的独立空间,称为栈帧;
当调用方法时,会创建新的栈帧,并压入调用栈;
当方法返回时,对应的栈帧就会自动被弹出;
2)方法参数,局部变量,返回地址都放在栈帧中,调用栈的栈帧和方法同生共死;
线程与调用栈
1)两个线程可以同时用不同的参数调用相同的方法,每个线程都有自己独立的调
用栈,互不干扰;
2)因为每个线程都有自己的调用栈,局部变量保存在线程各自调用栈里面,不会
共享,所以不会产生并发问题;
3)没有共享,就没有伤害;