Ich versuche Maximum Waiting Time
in meinem PQueue
zu setzen. Dieses Maximum Waiting Time
überprüft automatisch mein PQueue
, wenn% code_% mehr als links
wartet, um es zu entfernen. Ich habe diese Änderungen an meinem Code es funktioniert, aber es stoppt genau nach dem Entfernen der Links. Ich möchte alle Elemente aus meinem Maximum Waiting Time
nach der Wartezeit entfernen. Kannst du mir sagen, was ich hier vermisse?
Das ist meine Klasse:
%Vor% Ihre Frage ist ein bisschen undurchsichtig, aber wenn ich es richtig verstehe, wollen Sie Ihre PriorityQueue
überprüfen, um zu sehen, ob es Elemente gibt, die länger als eine bestimmte Zeit gewartet haben.
Ihre Verwendung von synchronized
auf IntraLinkCount
und InterLinkCount
ist, wie bereits erwähnt, ein bisschen seltsam. Es gibt eine ziemlich unbekannte Alternative, die atomare Integer-Klasse AtomicInteger
(im Paket java.util.concurrent.atomic
:
Dies funktioniert wie Sie wollen.
Das zweite Problem besteht darin, dass Sie die Methode poll()
verwenden. Dadurch wird das oberste Element aus der Warteschlange entfernt. Vielleicht möchten Sie stattdessen peek()
verwenden und dann remove()
nur verwenden, wenn das zurückgegebene Verknüpfungsobjekt link.waitingInQueue() > MaxWaitTime
?
Übrigens wird Ihre Warteschlange Artikel gemäß ihrer "natürlichen Reihenfolge" zurückgeben. Dies bedeutet, dass die Methode compareTo
verwendet wird und die "kleinste" zuerst aus der Warteschlange zurückgegeben wird. Ich denke, Sie möchten vielleicht ein benutzerdefiniertes compareTo
implementieren, das stattdessen den längsten wartenden Link zuerst platziert?
Sie könnten auch Ihre% erstellen. co_de% mit einem benutzerdefinierten PriorityQueue
Objekt statt.
In etwa so:
%Vor%Wenn Sie Glück haben, auf Java 8 zu sein, könnte eine Magie wie diese hilfreich sein:
%Vor%Tags und Links java search priority-queue