此代码是否存在任何同步/引用问题?
(假设myStrings
已经实例化。)MySynch.java
:
public class MySynch
{
public static String[] myStrings = new String[10];
public static void updateStrings()
{
synchronized (myStrings)
{
myStrings = new String[10]; // Safe?
myStrings[0] = something[0];
myStrings[1] = somethingElse[4];
}
}
}
对象数组
myStrings
可以由多个线程读取,并且具有一个线程可以通过运行updateStrings()
来更新(写入)对象数组。出于安全考虑,从中读取的线程也将使用synchronized (myStrings)
块从中读取。锁定数组并再次实例化锁定数组的
synchronized
块内中的是否存在问题? 最佳答案
存在一个同步问题:当myStrings设置为新实例,并且第二个线程在紧随其后执行该方法时,该第二个线程将同步myStrings的第二个实例。
您应该在类或任何其他静态最终对象上进行同步
synchronized(MySynch.class) {
...
}