局部变量线程安全问题

局部变量线程安全问题

求大神给解释下


java Java全栈+大数据工程师培训

javajava基础,Flume,Zookeeper实战,MetaStore及Hive执行流程剖析,Spark调优,轻松入门机器学习,免费试听申请!

2018-01-10 15:35  广告
有人吗


局部变量没有线程安全问题,不用解释了


收起回复
  • 3楼
  • 2016-02-01 14:35
    单例里面存在成员变量才会有线程安全问题,局部变量跟这有什么关系!


    收起回复
    • 4楼
    • 2016-02-01 15:20
      • mincike可以看看图片,我知道局部变量没有现成安全问题,但图片里的打印结果 我开始怀疑 局部变量线程安全是否是对的
        2016-2-1 15:25 回复
      • mincike经多次测试应该uuid内部在线程并发的时候 不做同步的情况下是会产生重复的uuid
        2016-2-2 22:21 回复
      • 仰望星空Json回复 mincike :还有这种情况,学习了
        2016-2-3 10:09 回复
      • 我也说一句

         

      这是偶然吧 uuid不会主动检查是否重复的 小概率事件


      这个问题在于你的变量是否被多个线程同时访问的条件,显然,你的这个变量是局部变量,但是你在局部方法块中创建了其它线程,而且其它线程可以访问到你的这个局部变量,所以会出现线程安全问题,解决这个问题你可以把你的变量创建成线程安全类


      收起回复
      • 6楼
      • 2016-02-02 08:45
        • mincike我知道我的那个testlog是线程不安全的,它是多个线程共享的,我想说的是uuid ,经最终多次测试uuid在并发调用下产生的uuid是会重复的,导致了上述打印结果
          2016-2-2 21:59 回复
        • mincike针对产生uuid的代码做syncharnized测了很多次倒是没见重复的
          2016-2-2 22:02 回复
        • 我也说一句

           

        静态类成为了一个全局变量,你得看看uuid中是否有成员变量没有做线程安全限制


        收起回复
        • 7楼
        • 2016-02-02 13:31
          • mincike回头自己研究下 uuid的源码
            2016-2-2 22:17 回复
          • yan396986015回复 mincike :线程安全主要是看有没有数据共享,而使用静态类就会变成全局共享,所以会有线程安全隐患,想要安全就得加锁
            2016-2-3 13:50 回复
          • 我也说一句

             

          感觉应该是uuid内部的问题.
          突然想起了,当初学习汇编的时候,调用函数和传递形参
          一个函数调用时在汇编是:call xxxxx
          调用函数,传参数,局部变量都是压到栈中的
          每调用一次函数,都要往栈中压一次局部变量,函数执行完成,栈就回收了.


          所过多次调用函数,那么栈中就有多个局部变量.
          • 0
            点赞
          • 0
            收藏
            觉得还不错? 一键收藏
          • 0
            评论

          “相关推荐”对你有帮助么?

          • 非常没帮助
          • 没帮助
          • 一般
          • 有帮助
          • 非常有帮助
          提交
          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

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

          抵扣说明:

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

          余额充值