java - 如何允许从同步结构中同时读取?

标签 java concurrency synchronized

假设我有一个像这样的简单缓存实现:

class Cache<Item> {
    private InternalStorage internalStorage;

    public synchronized Collection<Item> find(String query) {
        // find Items from internalStorage
    }

    public synchronized void add(Collection<Item> items) {
        // Add items to internalStorage
    }
}

我需要防止:

  1. 同时写入 internalStorage。即,不能同时调用 add
  2. 读取与写入同时发生。即不能同时调用 findadd

上面的实现满足了这些安全要求,但是,同时调用 find 并没有什么坏处,因为它不会更改数据。我怎样才能允许这样做,同时仍然保持结构线程安全?

最佳答案

如果您在这里使用 ReentrantReadWriteLock 而不是 synchronized,这似乎很容易做到。

关于java - 如何允许从同步结构中同时读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52148977/

相关文章:

asynchronous - JavaFX 显示加载对话框以进行更长时间的操作

concurrency - 并发http请求没有响应

java - Java synchronized 关键字是否刷新缓存?

java - 同步线程对象的run()方法

java - 为什么当我调用 notifyDataSetChanged() 时我的 ListView 没有更新?

java - 在 JPA 中映射复杂的 Map

Java 相当于 Doug Crockford 的 cycle.js

java - 当我将“extends Activity”更改为“extends ListActivity”时,为什么会收到 "source not found"?

java - 它是否正确? ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(numThreads);

java - 我可以使用静态 boolean 变量作为同步线程的锁吗?