Java中线程的同步

时间:2013-04-03 16:55:39

标签: java multithreading synchronization

您有一个存储对象O。

假设一个线程中有n个读者方法和一个编写器方法。如果一个线程调用了writer方法,那么读者方法都不能访问O,但如果一个reader方法访问O,那么任何其他读者都可以访问O而不是writer。我可以使用Java中的“synchronized”语句以某种方式实现此行为吗?如果不是:我怎么能做到这一点?

提前谢谢。

1 个答案:

答案 0 :(得分:7)

您可以使用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();
}