Java 缓存刷新时停止排除其他线程
我有一个功能,需要在定义的时间间隔后在后台运行作业。 为此,我使用ScheduledExecutorService在特定时间间隔后执行线程 为了存储缓存数据,我正在使用并发哈希映射 ConcurrentHashMapJava 缓存刷新时停止排除其他线程,java,multithreading,Java,Multithreading,我有一个功能,需要在定义的时间间隔后在后台运行作业。 为此,我使用ScheduledExecutorService在特定时间间隔后执行线程 为了存储缓存数据,我正在使用并发哈希映射 ConcurrentHashMap 当刷新正在进行时,应用程序中的另一个线程检查缓存并覆盖地图数据。我尝试使用Synchronized,但不起作用。基本上,我想要实现的是在缓存刷新正在进行时暂停其他进程。您可以使用ReentrantReadWriteLock同步读写操作。在ReentrantReadWriteLock
当刷新正在进行时,应用程序中的另一个线程检查缓存并覆盖地图数据。我尝试使用Synchronized,但不起作用。基本上,我想要实现的是在缓存刷新正在进行时暂停其他进程。您可以使用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();
因此,当缓存刷新时,不允许其他线程读/写映射,但当没有线程写入时,则允许多个线程读映射 为什么
同步
不工作?此外,您还应该展示一些您尝试过的代码?在我看来,您不需要暂停线程-一个简单的信号灯应该可以完成这个任务,是的,这是同步的。