以下是典型的读写器模式(大量读取和少量写入)
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();
}
}
我想知道是否有可能优先考虑作家和读者?例如,通常编写者可能会等待很长时间(可能永远),如果其他线程持有读取锁定,那么是否可以让编写器具有更高的优先级,因此每当编写器出现时,它都可以被认为是正如高优先级(跳过线)类似的东西。
答案 0 :(得分:4)
根据javadoc,jdk实现不具有任何读取器/写入器优先级。但是,如果你使用“公平”实现,那么锁 以fifo顺序被授予(仍然没有读者/作者偏好),所以至少未来的读者不会阻止等待的作者。
答案 1 :(得分:0)
写锁实际上已经优先于读卡锁。
如果一个线程想要读取资源,只要没有线程正在写入它就没关系,并且没有线程请求对资源的写访问权。通过优先考虑写访问请求,我们假设写请求比读请求更重要。
请参阅this excellent post了解详情。
编辑:请注意,这适用于fair mode only。谢谢@jtahlborn!