缓存刷新时停止执行其他线程

时间:2015-01-08 18:28:10

标签: java multithreading

我有一个功能,需要在定义的时间间隔后在后台运行作业。 为此,我使用ScheduledExecutorService在一定时间间隔后执行线程。

要存储缓存数据,我使用并发哈希映射。

的ConcurrentHashMap

当刷新发生时,应用程序中的另一个线程检查缓存并覆盖地图数据。我尝试使用同步但它没有工作。基本上我想要实现的是暂停其他进程,而缓存刷新是发生。

1 个答案:

答案 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();

因此,当您的缓存刷新时,不允许其他线程读取/写入您的地图,但是当没有线程正在写入时,将允许多个线程读取地图。