我有某种方法必须具备的数据结构。
public final class DataStructure {
private final Map<String> _data = ConcurrentHashMap.newKeySet();
public void add(final String s) {
_data.add(s);
}
synchronized public void writeToDisk() {
// code to write _data to disc
_data.clear();
}
}
在我的场景中,我有几个调用DataStructure#add的线程,有时另一个线程可能调用writeToDisk()。
有没有一种方法可以确保在一个线程调用DataStructure#writeToDisk且另一个线程调用DataStructure#add时不丢失任何数据,而又不同步添加到DataStructure#add?我不想这样做,因为这不会大大减慢我的程序的速度,而且调用DataStructure#writeToDisk的可能性很小。
更准确地说,是否有可能,并且仅当有人输入writeToDisk时才可以为所有线程锁定DataStructure#add,如果这样,writeToDisk()如何确保当前没有人在DataStructure#add调用中?