Ich arbeite also an diesem Programm, das einen Arbeitstag simuliert, und jeder Arbeiter ist sein eigener Thread. Ich versuche, Besprechungen zu implementieren, bei denen die Arbeiter an Besprechungen teilnehmen, aber die Besprechungen beginnen erst, wenn alle, die an der Besprechung teilnehmen sollen, eingetroffen sind. Ich habe also diese Methode für die Teilnahme an der Besprechung.
public void attendMeeting(Employee worker){
this.cdStart.countDown();
worker.meetingWait();
try {
this.cdStart.await();
worker.meetingStart(this.length);
if(this.attendees.get(0).equals(worker)){
this.room.exit();
} // end if
} // end try
catch (InterruptedException err) {
// Do Nothing
} // end catch
} // end method attendMeeting
Der Worker-Parameter ist eine Instanz der Employee-Klasse, die Thread erweitert, und this.cdStart ist das CountDownLatch. Bei einer Besprechung mit vier Mitarbeitern scheint jedoch nur ein Mitarbeiter in der Lage zu sein, die Zählung zu dekrementieren und den Aufruf await() auszuführen. Keiner der anderen Worker-Threads scheint in der Lage zu sein, die Sitzung zu betreten. Ich habe bemerkt, dass viele der Online-Beispiele der Verwendung übergeben das CountDownLock-Objekt an die Threads selbst zu behandeln. Gibt es einen Grund, warum dies nicht stattdessen funktionieren würde?