boolean (Reader status) { throwIfImpatient(status); Reader exstatus = exclusiveOwner.get(); if (exstatus == null || exstatus.state != Reader.State.WRITE) { status.state = Reader.State.READ; exstatus = exclusiveOwner.get(); if (exstatus == null || exstatus.state != Reader.State.WRITE) { return true; } status.state = Reader.State.CALM; } return false; }