首页 新闻 会员 周边

Java-多线程同步疑问

0
悬赏园豆:50 [已解决问题] 解决于 2019-06-03 17:29

问题:我有一个想法想要实现,例如:当我自己做一个API让别人用时,别人会有很多东西会传过来,我的业务逻辑会一个个处理,但这个务必会占用很多时间,我就想着能不能把一个个业务逻辑分配给多线程去处理,就有了如下简单的代码:

这些代码就产生如下随机的结果:

我的想法是,1~20都可以正常打印出来,可以不按顺序,但是一定不可以重复。

请问各位大神,有没有好的建议,帮助下初学者。不甚感激。

隐语者的主页 隐语者 | 初学一级 | 园豆:5
提问于:2019-05-15 14:43
< >
分享
最佳答案
0

num()方法应该是你要去多线程处理的业务逻辑,在main方法中,由于循环调用num方法时没有加锁,会出现第一个线程还未调用num(lt_num2)时,已经有多个线程将lt_num2进行了++,导致第一个线程调用num(lt_num2)时,lt_num2实际并不是1。需要在 lt_num2=i 前加锁,调用num()方法后再释放锁。

收获园豆:50
竹沥半夏 | 菜鸟二级 |园豆:296 | 2019-05-15 17:15

您好,已经解决,问题在于调用num(lt_num2);lt_num2 copy引用时(调用方法都会将参数复制一份引用/值传递到调用方法)主线程不断修改lt_num2的指向,如果多个子线程在下个修改之前成功复制了引用就会导致打印同样的值

隐语者 | 园豆:5 (初学一级) | 2019-05-15 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册