日期:2014-05-20  浏览次数:20680 次

Java线程中的局部变量?
为什么Java现在在
方法中执行时,内部的局部变量不会产生安全问题?

public void test()
{
int i = 0; // 例如这里的i
}

------解决方案--------------------
每当启动一个新线程时,java虚拟机都会为它分配一个java栈,java栈上的所有数据都是此线程私有的.任何线程都不能访问另一个线程的栈数据,因此我们不需要考虑多线程情况下栈数据的访问同步问题.当一个线程调用一个方法的时候,方法的局部变量保存在调用线程的java栈的桢中,只有一个线程能访问那些局部变量,即调用方法的线程.

摘自:<深入java虚拟机(第2版)>
------解决方案--------------------
火龙果说的不太完善,呵呵。每个线程都有自己的栈,这个线程里面所涉及的对象方法,每个方法由一个栈帧,用来存放局部变量,中间结果和操作数。