为了账号安全,请及时绑定邮箱和手机立即绑定

Java静态方法的线程安全性问题

Java静态方法的线程安全性问题

互换的青春 2019-04-26 23:19:40
如果多个线程同时访问同一个静态方法,后一个线程传递的参数值会覆盖前一个线程传递的参数值吗?代码示例如下:被访问的静态资源:public class C {public static void test(String[] value) throws InterruptedException{Thread.sleep(5000);System.out.println(Thread.currentThread().getId()); for(String v : value){     System.out.println(v); }}}线程1:public class A {public static void main(String[] args) throws InterruptedException {C.test(new String[]{"A","B", "C"});}}线程2:public class B {public static void main(String[] args) throws InterruptedException {C.test(new String[]{"D","E", "F"});}}在线程1访问静态方法test并传递参数后,假设在执行中或执行之前,下一个线程2也访问了test方法并传递了新的参数,此时在线程1遍历参数时,会遍历到线程2传递的参数吗?
查看完整描述

5 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

局部变量是线程安全的! 都有自己运行的线程堆栈!


查看完整回答
反对 回复 2019-05-06
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

不会的,局部变量是线程安全的


查看完整回答
反对 回复 2019-05-06
?
湖上湖

TA贡献2003条经验 获得超2个赞

不会覆盖。是线程安全的。
多线程情况下出问题只有一种可能:存在成员变量,且多个线程同时对成员变量进行读写。

你这种不存在成员变量。你那参数只是局部的。所以没有问题。
如果存在成员变量但是不存在并发读写也没问题(比如,只初始化一次的成员变量,其它结程只读取不写入)


查看完整回答
反对 回复 2019-05-06
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

局部变量线程安全,实例属性线程不安全,静态类的静态属性就不安全,但是静态方法里的参数是安全的


查看完整回答
反对 回复 2019-05-06
?
慕后森

TA贡献1802条经验 获得超5个赞

你们要告诉别人为什么方法时,使用入参是安全的?


查看完整回答
反对 回复 2019-05-06
  • 5 回答
  • 0 关注
  • 1483 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信