我的Android应用程序中有2个BroadcastReceivers。它们在同一个包装中。 如果在onReceive()方法中,它们都读/写静态类变量(在单独的Util类中)。 android是否创建该静态类变量的1个副本或2个(每个接收器1个)?
我需要做些什么来确保他们访问静态类变量而不破坏数据?
答案 0 :(得分:0)
不要使用静态变量,使类Singleton。
“我需要做些什么来确保他们访问静态类变量而不破坏数据?” - 将synchronized
添加到getter / setters
答案 1 :(得分:0)
静态变量只有一个实例。来自http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html:
类变量是声明的任何字段 使用静态修饰符;这说明了 编译器中只有一个 这个变量的副本存在, 无论班级多少次 已被实例化。
为避免出现问题,您必须确保静态变量是线程安全的。某些数据结构(如Vector
)已经是线程安全的,因此您无需进一步操作。否则,您可能必须使用synchronized关键字或java.util.concurrent.locks包中的内容。