0 0

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

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

5个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2014年6月25日 17:20
0 0

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

2014年6月24日 22:25
0 0

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

2014年6月24日 16:48
0 0

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

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

2014年6月24日 16:30
0 0

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

2014年6月24日 16:25

相关推荐

    多线程Java程序安全行为模型的静态检查方法.pdf

    该方法可以提高多线程Java程序的安全性,並且可以应用于携带模型代码方法的实现框架中。 知识点: 1. 多线程Java程序安全行为模型的静态检查方法 2. 参数化扩展上下文无关文法在安全行为模型中的应用 3. 自动生成...

    Java集合多线程安全.docx

    4. `HashSet`:基于`HashMap`,因此也具有相同的线程安全性问题。 5. `TreeMap`和`TreeSet`:它们依赖于内部排序,多线程环境下的修改可能破坏排序,导致不正确的行为。 6. `StringBuilder`:虽然用于字符串连接,但...

    java线程安全性精讲.docx

    Java线程安全性是多线程编程中的核心概念,关乎程序的稳定性和正确性。Java提供了多种机制来确保线程安全,主要包括原子性、可见性和有序性。 **原子性**是线程安全的基础,保证了操作不会被其他线程打断。Java提供...

    Java中的线程安全与线程同步.doc

    同时,避免使用静态变量存储线程相关的状态,尽量减少共享资源的使用,都有助于提升程序的线程安全性。 总之,Java中的线程安全与线程同步是保障多线程环境下程序正确运行的关键,开发者需要根据具体场景选择合适的...

    Java多线程-同步机制解决线程安全问题方式一:同步代码块

    总结来说,Java中的同步代码块是一种有效的解决线程安全问题的手段,通过限制对共享资源的并发访问,可以保证数据的一致性和线程的安全性。然而,过度使用同步可能会降低程序的性能,因此需要合理设计同步范围,确保...

    java经典多线程面试题

    - java.util.concurrent包中提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,这些集合类能够在多线程环境下提供更安全且效率更高的数据操作。 11. Java中ReentrantLock和synchronized...

    java多线程_java多线程下变量共享_

    对于共享变量,可以将其修改为`synchronized`方法或在操作变量的代码段前加上`synchronized`,确保线程安全。 2. `volatile`关键字:它确保了线程对变量的修改能立即被其他线程看到。`volatile`变量不会被线程缓存...

    Java多线程编程

    9. **并发容器**:Java并发包提供了线程安全的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们在多线程环境下保证了数据的一致性和正确性,减少了同步的开销。 10. **线程优先级**:Java中的线程有...

    java static方法 引用static属性 存在线程安全问题-原理分析

    Java中的静态方法和静态属性是线程安全问题的常见触发点。线程安全问题通常发生在多个线程同时访问和修改共享资源时,如果没有适当的同步机制,可能会导致数据不一致或出现不可预测的结果。 首先,我们要理解`...

    java枚举是如何保证线程安全的

    在Java中,枚举是一种特殊的类,由编译器自动处理并确保其线程安全性。以下是关于Java枚举线程安全的详细解释。 首先,枚举类型在Java中实际上是通过继承`Enum`基类来实现的。当定义一个枚举时,如`public enum T {...

    java多线程示例

    四、线程安全问题 1. 线程不安全的数据访问:共享变量可能引发数据不一致,需要通过同步机制保证一致性。 2. 死锁:多个线程互相等待对方释放资源导致僵局。 3. 活锁:线程不断尝试执行失败的操作,导致资源浪费。 4...

    Java多线程-解决单例模式中的懒汉式的线程安全问题

    ### Java多线程—解决单例模式中的懒汉式的线程安全问题 #### 一、单例设计模式的线程安全问题 ##### (1)饿汉式没有线程安全问题 **饿汉式**是一种非常典型的单例...无论哪种方式,都应该确保实现的线程安全性。

    Java线程安全的Singleton模式:深入分析与实现

    通过使用饿汉式、懒汉式与双重检查锁定、静态内部类或枚举等方式,可以确保Singleton实例的唯一性和线程安全。每种方式都有其适用场景和优缺点,开发者应根据实际需求选择合适的实现方式。正确实现Singleton模式,...

    java 程序多线程设计课件

    6. **并发集合**:Java提供了一系列的并发集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们内部实现了线程安全,为多线程环境下的数据操作提供了便利。 7. **线程池**:`ExecutorService`和`...

    基于java线程安全问题及原理性分析

    "基于java线程安全问题及原理性分析" 基于 Java 线程安全问题是指在多线程环境中,多个线程访问同一个对象时可能发生的安全问题。这种问题产生的根本原因是共享数据存在被并发修改的可能,即一个线程读取时,允许另...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java中双检锁/双重检查锁定(Double-Check Locking,DCL)和静态内部类是实现线程安全单例的常用方法。 5. 状态对象模式:用于在多线程中同步访问对象的状态,例如CountDownLatch、CyclicBarrier和Semaphore等并发...

    java线程安全总结.pdf

    5. **原子操作类**:`java.util.concurrent.atomic`包下的原子类如`AtomicInteger`, `AtomicLong`等,提供了在无同步的情况下进行原子更新的操作,确保了操作的线程安全性。 6. **并发容器**:Java集合框架中的某些...

    Java多线程的简单应用

    - Applet的生命周期包括init(), start(), paint(), stop(), destroy()等方法,这些方法可能在不同的线程中被调用,因此要确保线程安全。 - Applet需要在浏览器环境中运行,其安全性受到限制,不能直接访问本地文件...

    java多线程笔记全手打

    线程安全主要涉及原子性、可见性和有序性问题。Java提供了一系列并发工具类,如`Atomic`系列类、`ConcurrentHashMap`、`BlockingQueue`等,帮助开发者编写线程安全的代码。 十、线程间的协作 通过`CountDownLatch`...

Global site tag (gtag.js) - Google Analytics