同步模式

and*_*w.z 5 java concurrency

我有一个名为"Channel"的类,定义了两个方法:

class Channel {

    void read(){...}
    void write(){...}
}
Run Code Online (Sandbox Code Playgroud)

在多线程环境中使用了这个类的实例.多个线程定期从通道读取,而一个线程周期性地写入它.读操作是线程安全的,因此可以同时进行多次读操作.但是,一旦写入操作开始,必须阻止读取线程,直到写入操作完成.必须尽可能快地保持读取操作并避免消耗资源的同步例程.

实施此类行为的最合适模式是什么?也许java类或库有帮助吗?

Joh*_*int 8

使用ReadWriteLock.它将允许串行写入发生并发读取.为了进一步满足您的要求,收购a writeLock将阻止任何readLock人在后续发布之前取得进展.

class Channel {
    final ReadWriteLock lock = new ReentrantReadWriteLock();

    void read(){
      lock.readLock().lock();
      try{

      }finally{
         lock.readLock().unlock();
      }
    }
    void write(){   
      lock.writeLock().lock();
      try{

      }finally{
         lock.writeLock().unlock();
      }
    }
}
Run Code Online (Sandbox Code Playgroud)