我有一个功能,需要在定义的时间间隔后在后台运行作业。 为此,我使用ScheduledExecutorService在一定时间间隔后执行线程。
要存储缓存数据,我使用并发哈希映射。
的ConcurrentHashMap
当刷新发生时,应用程序中的另一个线程检查缓存并覆盖地图数据。我尝试使用同步但它没有工作。基本上我想要实现的是暂停其他进程,而缓存刷新是发生。
答案 0 :(得分:0)
您可以使用ReentrantReadWriteLock同步您的读写操作。在ReentrantReadWriteLock中,允许多个线程读取&只允许一个线程写入您的共享资源,该资源在您的情况下映射。如果线程正在写入共享资源,则其他线程将等待读/写请求。
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readWriteLock.readLock().lock();
// multiple readers can enter this section
// if not locked for writing, and not writers waiting
// to lock for writing.
readWriteLock.readLock().unlock();
readWriteLock.writeLock().lock();
// only one writer can enter this section,
// and only if no threads are currently reading.
readWriteLock.writeLock().unlock();
因此,当您的缓存刷新时,不允许其他线程读取/写入您的地图,但是当没有线程正在写入时,将允许多个线程读取地图。