Java:具有优先级的ReentrantReadWriteLock

pet*_*ter 6 java multithreading reentrantreadwritelock readwritelock reentrantlock

以下是典型的读写器模式(大量读取和少量写入)

  private ReadWriteLock lock = new ReentrantReadWriteLock();
  private int value;

  public void writeValue(int newValue){
       lock.writeLock().lock();
       try{
           this.value = newValue;
       }
       finally{
           lock.writeLock().unlock();
       }
  }

  public int readValue(){
       lock.readLock().lock();
       try{
           return value;
       }
       finally{
           lock.writeLock().unlock();
       }
  }
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能优先考虑作家和读者?例如,通常编写者可能会等待很长时间(可能永远),如果其他线程持有读取锁定,那么是否可以让编写器具有更高的优先级,因此每当编写器出现时,它都可以被认为是正如高优先级(跳过线)类似的东西.

jta*_*orn 5

按照javadoc的,JDK实现并不会有任何读/写器的优先级。但是,如果你使用了“公平”的实现,那么锁授予先进先出的顺序(还没有读/写器偏好),因此至少未来的读者不会阻止等待作家。