局部变量线程安全问题 只看楼主 收藏 回复 mincike 沝 2 求大神给解释下 回复 1楼 2016-02-01 14:29 举报 |个人企业举报垃圾信息举报 TARENAINTERNATIONAL,INC. java Java全栈+大数据工程师培训 javajava基础,Flume,Zookeeper实战,MetaStore及Hive执行流程剖析,Spark调优,轻松入门机器学习,免费试听申请! 2018-01-10 15:35 广告 mincike 沝 2 有人吗 回复 2楼 2016-02-01 14:32 举报 |个人企业举报垃圾信息举报 cheng406504325 淼淼淼沝 11 局部变量没有线程安全问题,不用解释了 收起回复 3楼 2016-02-01 14:35 举报 |个人企业举报垃圾信息举报 来自iPhone客户端 mincike: 那图片里打印的结果如何解释呢? 2016-2-1 14:36 回复 cheng406504325: 回复 mincike :没看图片 2016-2-1 14:38 回复 我也说一句 仰望星空Json 淼淼淼沝 11 单例里面存在成员变量才会有线程安全问题,局部变量跟这有什么关系! 收起回复 4楼 2016-02-01 15:20 举报 |个人企业举报垃圾信息举报 来自Android客户端 mincike: 可以看看图片,我知道局部变量没有现成安全问题,但图片里的打印结果 我开始怀疑 局部变量线程安全是否是对的 2016-2-1 15:25 回复 mincike: 经多次测试应该uuid内部在线程并发的时候 不做同步的情况下是会产生重复的uuid 2016-2-2 22:21 回复 仰望星空Json: 回复 mincike :还有这种情况,学习了 2016-2-3 10:09 回复 我也说一句 脑放 淼沝 5 这是偶然吧 uuid不会主动检查是否重复的 小概率事件 回复 5楼 2016-02-01 16:55 举报 |个人企业举报垃圾信息举报 来自iPhone客户端 2012敌敌畏 淼淼淼沝 11 这个问题在于你的变量是否被多个线程同时访问的条件,显然,你的这个变量是局部变量,但是你在局部方法块中创建了其它线程,而且其它线程可以访问到你的这个局部变量,所以会出现线程安全问题,解决这个问题你可以把你的变量创建成线程安全类 收起回复 6楼 2016-02-02 08:45 举报 |个人企业举报垃圾信息举报 来自iPhone客户端 mincike: 我知道我的那个testlog是线程不安全的,它是多个线程共享的,我想说的是uuid ,经最终多次测试uuid在并发调用下产生的uuid是会重复的,导致了上述打印结果 2016-2-2 21:59 回复 mincike: 针对产生uuid的代码做syncharnized测了很多次倒是没见重复的 2016-2-2 22:02 回复 我也说一句 yan396986015 淼淼沝 8 静态类成为了一个全局变量,你得看看uuid中是否有成员变量没有做线程安全限制 收起回复 7楼 2016-02-02 13:31 举报 |个人企业举报垃圾信息举报 来自iPhone客户端 mincike: 回头自己研究下 uuid的源码 2016-2-2 22:17 回复 yan396986015: 回复 mincike :线程安全主要是看有没有数据共享,而使用静态类就会变成全局共享,所以会有线程安全隐患,想要安全就得加锁 2016-2-3 13:50 回复 我也说一句 897180673 水 1 感觉应该是uuid内部的问题. 突然想起了,当初学习汇编的时候,调用函数和传递形参 一个函数调用时在汇编是:call xxxxx 调用函数,传参数,局部变量都是压到栈中的 每调用一次函数,都要往栈中压一次局部变量,函数执行完成,栈就回收了. 所过多次调用函数,那么栈中就有多个局部变量.