黑马程序员技术交流社区
标题:
求教,多线程的同一对象局部变量为啥不用同步
[打印本页]
作者:
曲终烟尽
时间:
2015-6-6 15:06
标题:
求教,多线程的同一对象局部变量为啥不用同步
class Bank
{
private int sum;
Object obj=new Object();
public void add(int n)
{
synchronized(obj)
{
sum=sum+n;
System.out.println("sum="+sum);
}
}
}
class Cus implements Runnable
{
private Bank b=new Bank();
public void run()
{
for(int x=0;x<3;x++)//这个x在运行时会不会发生多个线程同时进入,而多个线程是不是公用这个x,为什么?
{
b.add(100);
}
}
}
public class BankDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cus c=new Cus();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
复制代码
for语句中的x
这个x在运行时会不会发生多个线程同时进入,而多个线程是不是公用这个x,为什么?
作者:
曲终烟尽
时间:
2015-6-6 15:19
是不是线程1进去后 创建了一个局部变量x,线程2再进去又创建了一个局部变量x???
而
Cus c=new Cus();
在创建线程前已经创建了这个 c对象,c对象里的
private Bank b=new Bank();
已经存在b成员变量。
所以两个线程共同操作的b是之前就有的,所以会发生安全问题,而int x局部变量是线程运行后创建的所以是分别拥有的数据,所以互不影响,我这样理解对吗???
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2