Java中线程的同步

use*_*885 1 java multithreading synchronization

你有一个存储对象O.

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

先感谢您.

Gra*_*ray 7

你可以用一个ReadWriteLock.您可以将它分配给读写器线程可以访问它的位置.也许将它传递给他们的构造函数.

ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
Run Code Online (Sandbox Code Playgroud)

读者会这样做:

Lock lock = readWriteLock.readLock();
lock.lock();
try {
  // do read operations here...
} finally {
  lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

作家会这样做:

Lock lock = readWriteLock.writeLock();
lock.lock();
try {
  // do write operations here...
} finally {
  lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)