java - 拥有可变类的静态实例是否安全?
解决方案
它不是线程安全的,尽管这与它是类的静态成员无关;非静态成员也可以在多个线程之间共享。
public class Example implements Runnable {
public static void main(String[] args) {
Example sharedInstance = new Example();
for(int i = 0; i < 5; i++) {
new Thread(sharedInstance, "Worker " + (i + 1)).start();
}
}
public void run() {
for(int i = 0; i < 42; i++) {
System.out.println(count++);
}
}
private int count;
}
在这个例子中,声明private static int count
不会改变程序的语义,尽管由于 JVM 优化仍然可能产生不同的结果。
因此,最终,您必须确定在任何给定时间有多少线程可以访问实例FacesMessage
以及每个线程可能对其执行的操作。如果这些星座中的任何一个涉及修改,您将不得不添加某种形式的同步。
推荐阅读
- java - InteractionDialog 相对于 Dialog 的优势?
- scala - Akka 持久化参与者 - 函数式方法
- angular - 将现有对象添加到数组并在视图上显示(2way 绑定)
- testing - 如何为 escript 项目在 elixir 中编写 ExUnit 测试用例
- ruby-on-rails - Rails Enum 返回整数值,而不是字符串表示
- vb.net - 尝试使用 VB.Net 列出某个目录中的所有文件
- c - 我需要对矩阵进行排序,以便行中的值保持相同的顺序,但整行会根据某些标准改变它们的位置
- android - 如何解决android studio错误Gradle Sync?
- node.js - Mongodb不在文档中存储字符串数组
- ios - GCKSessionManager - 会话未恢复