仅在调用另一个方法时如何锁定一个方法

时间:2019-04-28 07:37:41

标签: java multithreading concurrency locking

我有某种方法必须具备的数据结构。

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调用中?

0 个答案:

没有答案