您有一个存储对象O。

假设您在一个线程中有n个读者方法和一个作家方法。如果通过线程调用writer方法,则所有读取器方法都不能访问O,但是如果读取器方法访问O,则任何其他读取器都可以访问O,但不能访问writer。我可以使用Java中的“同步”语句以某种方式实现此行为吗?如果没有:我还能如何实现?

先感谢您。

最佳答案

您可以使用ReadWriteLock。您将其分配到读取器和写入器线程可以访问它的位置。也许将其传递给他们的构造函数。

ReadWriteLock readWriteLock = new ReentrantReadWriteLock();


读者会这样做:

Lock lock = readWriteLock.readLock();
lock.lock();
try {
  // do read operations here...
} finally {
  lock.unlock();
}


作家会这样做:

Lock lock = readWriteLock.writeLock();
lock.lock();
try {
  // do write operations here...
} finally {
  lock.unlock();
}

07-24 19:47