java堆内存被所有线程所共享,不明白2个线程如何共享2个对象中的同名变量。
classdemoimplementsRunnable{intcount=0;publicvoidshow(){intcount=0;}}publicclassdemo1...
class demo implements Runnable
{
int count=0;
public void show()
{
int count=0;
}
}
public class demo1
{
public static void main(string[] args)
{
Thread S1=new Thread(new demo());
Thread S2=new Thread(new demo());
}
}
视频里的老师说,count定义在成员上就被下面S1和S2两个线程所共享,2个线程同时操作一个count因为在成员上count就在堆内存中存在。只有定义在方法里(局部变量),才会被2个线程分别操作。但我理解的是创建对象岂不是已经在堆内存存在2个对象了吗?每个对象里都有count,那意味着堆内存中存在2个count,且分别在2个对象中。那么这两个线程按道理应该是操作不同的count才对。我想我的理解应该是出问题了,不知道有没有高人能够帮忙指点迷津。谢谢!(PS:因为为了针对问题,例子写的非常简单,请见谅) 展开
{
int count=0;
public void show()
{
int count=0;
}
}
public class demo1
{
public static void main(string[] args)
{
Thread S1=new Thread(new demo());
Thread S2=new Thread(new demo());
}
}
视频里的老师说,count定义在成员上就被下面S1和S2两个线程所共享,2个线程同时操作一个count因为在成员上count就在堆内存中存在。只有定义在方法里(局部变量),才会被2个线程分别操作。但我理解的是创建对象岂不是已经在堆内存存在2个对象了吗?每个对象里都有count,那意味着堆内存中存在2个count,且分别在2个对象中。那么这两个线程按道理应该是操作不同的count才对。我想我的理解应该是出问题了,不知道有没有高人能够帮忙指点迷津。谢谢!(PS:因为为了针对问题,例子写的非常简单,请见谅) 展开
4个回答
展开全部
首先:堆内存共享是相对于栈内存的。栈是每一个线程都独有的,线程之间互不一向,每一个线程都有自己的栈内存。但是堆内存不一样,在一个JVM实例里面,不管你有多少线程,创建了多少对象,都是放在一块堆内存的。也就是说一个JVM实例栈内存区域是有多个,每一个线程持有一个,而堆内存只有一个,是线程共享的。
其次:针对你这个代码,这个情况下每一个线程确实是对应着不同的对象。也就是在同一个堆(也只有一个堆)里面创建了两个Demo对象。你老师的意思应该是
Demo demo = new demo();
Thread S1=new Thread(demo);
Thread S2=new Thread(demo);
这样两个线程都是操作堆内存共享的对象。
其次:针对你这个代码,这个情况下每一个线程确实是对应着不同的对象。也就是在同一个堆(也只有一个堆)里面创建了两个Demo对象。你老师的意思应该是
Demo demo = new demo();
Thread S1=new Thread(demo);
Thread S2=new Thread(demo);
这样两个线程都是操作堆内存共享的对象。
展开全部
Thread S1=new Thread(new demo());
Thread S2=new Thread(new demo());
你是这样写的, new demo() 你调用了两次, 会生成两个 demo对象,每个线程都会去操作对应对象的 count. 这是 两个线程 操作 两个 count, 中间互不影响。
demo d=new demo();
Thread S1=new Thread(d);
Thread S2=new Thread(d);
如果这样的话, 两个线程操作的是同一个count
Thread S2=new Thread(new demo());
你是这样写的, new demo() 你调用了两次, 会生成两个 demo对象,每个线程都会去操作对应对象的 count. 这是 两个线程 操作 两个 count, 中间互不影响。
demo d=new demo();
Thread S1=new Thread(d);
Thread S2=new Thread(d);
如果这样的话, 两个线程操作的是同一个count
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询