写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();
System.out.println("主线程中i的值变为了:"+i.i); //获取目前对象i的数值
}
}
class OwnThread extends Thread
{
Num id;

本文探讨了Python和Java编程中多线程环境下变量共享的问题。局部变量在每个线程的堆栈中独立,而成员变量是否共享取决于它们是否指向同一个对象实例。通过示例代码分析,展示了如何在不同线程间共享对象实例,以及基本数据类型的限制。了解这些原理对于多线程编程中的数据交互至关重要。
最低0.47元/天 解锁文章
1126

被折叠的 条评论
为什么被折叠?



