abstract class
DBClientTemplate {
protected DatabaseAccess dba;
abstract boolean databaseSafe();
abstract void databaseWait() throws InterruptedException;
abstract void databaseEnter();
abstract void databaseExit();
DBClientTemplate(DatabaseAccess dba) {
this.dba = dba;
}
void
enter()
throws InterruptedException {
dba.mutex.lock();
if (!databaseSafe())
databaseWait();
assert databaseSafe() && dba.mutex.isLocked();
databaseEnter();
}
void
exit() {
try { dba.mutex.lock(); }
catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
databaseExit();
}
}
syntax highlighted by Code2HTML, v. 0.9