对于大学作业,我需要实现医院患者等待系统的一部分。该系统使用等待名单上的患者集合,以及在特定时期(例如今年)注册手术的一组患者。
我已经使用 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;
}
}