写python程序的时候遇到了共享变量的问题,在网上看到了一篇讲java多线程变量共享的文章,有共通之处,整理下发在这里吧。
1.方法体内部定义的局部变量不共享。
这是因为方法内部定义的变量是在运行时动态生成的。每个线程都有一个自己的堆栈,用于保存运行时的数据。 最容易理解的就是递归调用时候,每次的入栈出栈操作。如下,每次调用时,变量a都是在运行时堆栈上保存的,方法结束变量也就释放了。
public int fib(int n)
{
int a;
if(n==1 || n==0)
return 1;
else
return fib(n-1)*n;
}
2.成员变量需要看变量指向的是否为同一个对象。
看下面的代码示例:
public class Analy {
public static void main(String[] args) {
Num i=new Num(0); //新建对象,准备传递给线程,对于对象java采用引用传递,因此线程间相当于共享该变量
OwnThread t1=new OwnThread(i);
OwnThread t2=new OwnThread(i); //新建线程,并启动
t1.start();
t2.start();
t1.join();
t2.join();