黑马程序员技术交流社区

标题: 求教,多线程的同一对象局部变量为啥不用同步 [打印本页]

作者: 曲终烟尽    时间: 2015-6-6 15:06
标题: 求教,多线程的同一对象局部变量为啥不用同步
  1. class Bank
  2. {
  3.         private int sum;
  4.         Object obj=new Object();
  5.         public void add(int n)
  6.         {
  7.                 synchronized(obj)
  8.                 {
  9.                         sum=sum+n;
  10.                         System.out.println("sum="+sum);
  11.                 }
  12.         }
  13. }

  14. class Cus implements Runnable
  15. {
  16.         private Bank b=new Bank();
  17.         public void run()
  18.         {
  19.                 for(int x=0;x<3;x++)//这个x在运行时会不会发生多个线程同时进入,而多个线程是不是公用这个x,为什么?
  20.                 {
  21.                         b.add(100);
  22.                 }
  23.         }
  24. }

  25. public class BankDemo {

  26.         public static void main(String[] args) {
  27.                 // TODO Auto-generated method stub
  28.                 Cus c=new Cus();
  29.                 Thread t1=new Thread(c);
  30.                 Thread t2=new Thread(c);
  31.                 t1.start();
  32.                 t2.start();
  33.         }

  34. }
复制代码

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