魯迅ヤン:
私は他の方法のために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
操作関数(clear
、Recycle
、delete
)スレッドの安全性を確保するために同期させる必要があります(リンクは列挙型についてですが、同じことが一人ひとりSinlgetonの実装について保持しています):
public synchronized void RecycleEmail(Email email)