java - 我可以使用方法的哪些属性来检查它是否是线程安全的?

标签 java multithreading

例如我有以下功能:

public static final Function<A,B> MAP_A_TO_B(){
    return new Function<A,B>() {
        @Override
        public B apply(A) {
            switch (A) {
                case 1:
                    return B1;
                case 2:
                    return B2;
            }
            return B0;
        }
    };
}

但我不知道它是否是线程安全的,据我所知,因为该方法不会写入任何类变量,所以它应该是安全的。我的假设正确吗?

非常感谢。

最佳答案

不要将线程安全视为方法的属性,而应将其视为数据项的属性。

为了线程安全,数据项必须是不可变的,或者对它的所有更改必须自动发布到所有线程(通过 volatile ),或者所有访问(读取和写入)必须由同一锁保护(同步对象),或者该对象必须在静态初始值设定项中设置,并且此后永远不会更改。

Java multi-threading & Safe Publication

关于java - 我可以使用方法的哪些属性来检查它是否是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420014/

相关文章:

java - 如何将jpcap数据包捕获的数据显示到JTable?

java - 对LeetCode上的 “Print in Order”问题感到困惑

java - volatile变量可以在java中定义为静态吗?

在线程中写入的python文件不写入所有行

java - 如何将参数从 asynctask 解析为方法?

java - JPA : Many to many relationship in Google App

java - 同步问题

c# - 在 silverlight 中使用 while(true) 会很危险吗?

java - volatile 对象工作

java - 如何检测输入文件是否包含某些字段