局部变量线程安全的理解

局部变量线程安全的理解

原创  2017年10月11日 20:24:16

局部变量:线程安全
        每个线程执行时将会把局部变量放在各自栈帧的工作内存中,线程间不共享,故不存在线程安全问题。

如何理解上面这句话:

        局部变量(方法内部的私有变量)是线程安全的,如下段代码中的num这个私有变量是线程安全的,原因是在new HasSelfPrevateNum()这个类的时候它只会为类中的属性成员变量开辟空间,而方法只在方法区开辟一个内存空间并且只存一份是共用的代码段(变量在堆区,引用在栈区),而方法中的私有变量不会先开辟出内存空间,而是等调用时在对应调用线程中为方法中的变量申请空间,所以有几个线程调用则每个线程就会在自己的线程空间的栈为局部变量申请几个引用同时在堆中为变量再申请对应的空间(即方法内的私有变量有几个线程就在栈中申请几个引用,在堆中申请几个空间),所以多线程在调用时只会处理自己线程内的方法的私有变量,因此,方法内的私有变量是线程安全的。

如:

[java]  view plain  copy
  1. public class HasSelfPrivateNum {  
  2.       
  3.     public void addI(String username)  
  4.     {  
  5.         try  
  6.         {  
  7.             int num = 0;  
  8.             if(username.equals("a"))  
  9.             {  
  10.                 num = 100;  
  11.                 System.out.println("a set over !");  
  12.                 Thread.sleep(2000);  
  13.             }  
  14.             else  
  15.             {  
  16.                 num = 200;  
  17.                 System.out.println("b set over !");  
  18.             }  
  19.             System.out.println(username + " num = " + num);  
  20.         } catch (InterruptedException e) {  
  21.             e.printStackTrace();  
  22.         }  
  23.     }  
  24. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值