wawxy2008
wawxy2008
2014-06-24 15:02

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

已采纳

如果多个线程同时访问同一个静态方法,后一个线程传递的参数值会覆盖前一个线程传递的参数值吗?代码示例如下:
被访问的静态资源:
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条回答

  • iteye_15645 iteye_15645 7年前

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

    点赞 评论 复制链接分享
  • jiewo 行舟 7年前

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

    点赞 评论 复制链接分享
  • Iloveyou111111111111 Iloveyou111111111111 7年前

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

    点赞 评论 复制链接分享
  • mfkvfn mfkvfn 7年前

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

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

    点赞 评论 复制链接分享
  • qsh115 qsh115 7年前

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

    点赞 评论 复制链接分享

相关推荐