大学の課題では、病院の患者待機システムの一部を実装する必要があります。システムは、待機リストにある患者のコレクションと、今年などの指定された期間中の手術に登録された患者のセットを使用します。
HashSet と LinkedList を使用して、以下のように必要なメソッドを実装しました。メソッドはほぼ完全に同期されているので、同期の少ないより効率的な実装があるかどうか、またはロックを使用したより粒度の細かい読み書き同期があるかどうか疑問に思っていますか?
public Class OperationPeriod {
...
private Set<Patient> registeredPatients=new HashSet<Patient>();
private Collection<Patient> waitingListPatients=new LinkedList<Patient>();
private int capacity;
...
public boolean bookOperation(Patient patient){
if (!Operation.checkHasMetRequirements(patient)) {
return false;
}
//patient could already be registered
synchronized(this) {
if(registeredPatients.contains(patient)) {
return true;
}
if(waitingListPatients.contains(patient) ) {
return false;
}
//Not already registered so register or add to waiting list
return addPatient(patient);
}
}
private boolean addPatient(Patient patient) {
if(registeredPatients.size() < capacity) {
registeredPatients.add(patient);
return true;
}
else {
waitingListPatients.add(patient);
return false;
}
}