此代码是否存在任何同步/引用问题?

(假设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) {
    ...
}

09-25 20:42