シングルトンデザインパターンを使用する場合は、他の方法は、スレッドの安全性を確保するためにsynchronizedキーワードを使用する必要がありますか?

魯迅ヤン:

私は他の方法のためにsynchronizedキーワードを使用する必要があり、以下のクラスは、スレッドセーフであることを確認したいですか?またはストアメールにスレッドセーフなデータ構造を使用します。私は何をすべきか?

public class RecycleStation {
    private static volatile RecycleStation uniqueInstance;
    private static List<Email> recycleEmailList ;

    private RecycleStation() {
        recycleEmailList = new ArrayList<>();
    }

    public static RecycleStation getInstance() {
        if (uniqueInstance == null) {
            synchronized (RecycleStation.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new RecycleStation();
                }
            }
        }
        return uniqueInstance;
    }

    public void RecycleEmail(Email email) {
        recycleEmailList.add(email);
    }

    public void deleteEmail(Email email) {
        recycleEmailList.remove(email);
    }

    public void clear() {
        recycleEmailList.clear();
    }

}
igorepst:

まず、Singletonパターンは、最高のJavaで列挙型として実装されている第二に、各email操作関数(clearRecycledeleteスレッドの安全性を確保するために同期させる必要があります(リンクは列挙型についてですが、同じことが一人ひとりSinlgetonの実装について保持しています):

public synchronized void RecycleEmail(Email email)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=206055&siteId=1