假设我有一些想要同步访问的资源。大多数这些访问都是只读的。我想一次允许尽可能多的只读访问系统可以处理。但是,我希望能够停止阅读,进行一些写入,然后再次允许阅读。
所以读取线程可能看起来像这样
Resource r = null;
readLock.acquire();
r = resources.get();
readLock.release();
任何数量的线程都可以同时执行此操作,这不是问题。
写线程看起来像这样:
readLock.acquireOnlyMe(); // waits for all other threads to relase
// all other threads block when they try to acquire
r = resources.get();
r.setData(data);
readLock.release();
现在,我正在使用ReentrantLock
既可读取又可写入的 a 。但显然,当我宁愿它们同时工作时,这会导致读取按顺序工作。
我能做些什么来解决这个问题?
这似乎被称为读者-作者问题,wiki 条目列出了一些 C 实现,但没有用于 Java。
编辑:我对任何可以完成工作的 Java 库持开放态度。标题说 java.util.concurrent 是因为答案似乎很可能就在那儿。