Próbuję ustawić Maximum Waiting Time
w moim PQueue
. Ta Maximum Waiting Time
automatycznie sprawdzi moją PQueue
, jeśli są jakieś links
, które czekają dłużej niż Maximum Waiting Time
, aby ją usunąć. Wprowadziłem zmiany do mojego kodu, który działa, ale zatrzymuje się dokładnie po usunięciu linków. Chcę usunąć wszystkie elementy z mojego PQueue
zgodnie z warunkami czasu oczekiwania. Czy możesz mi powiedzieć, czego tu brakuje?Jak usunąć elementy z PriorityQueue zgodnie z właściwością elementu?
To moja klasa:
public class MyClass {
public static PriorityQueue <LinkNodeLight> PQueue = new PriorityQueue <>();
private static Set<String> DuplicationLinksHub = new LinkedHashSet <>();
private static Integer IntraLinkCount = new Integer (0);
private static Integer InterLinkCount = new Integer (0);
private static Integer DuplicationLinksCount = new Integer (0);
private static Integer MaxWaitTime = new Integer (60000); // 1 M= 60000 MS
@SuppressWarnings("null")
LinkNode deque(){
LinkNode link = null;
synchronized (PQueue) {
link = (LinkNode) PQueue.poll();
if (link != null) {
link.setDequeTime(new DateTime());
if (link.isInterLinks())
synchronized (InterLinkCount) {
InterLinkCount--;
}
else
synchronized (IntraLinkCount) {
IntraLinkCount--;
}
}
synchronized (PQueue) {
if (link.waitingInQueue()>MaxWaitTime) {
link = (LinkNode) PQueue.remove();
System.out.println("*********************************");
System.out.println("This Link is Deopped: " + link);
System.out.println("%%% MaX Waiting Time:" + (MaxWaitTime/60000)+"Min");
System.out.println("*********************************");
}
}
return link;
}
nie wyglądał przez cały kodzie, ale synchronizacja na 'InterLinkCount' lub' IntraLinkCount' nie działa. Ciągle się zmieniasz, do którego obiektu odnoszą się te zmienne, więc różne wątki nie nabywają tych samych zamków. – user2357112
@ user2357112 to nie jest mój cały projekt, ponieważ jest to duży program. To jest część tego. W razie potrzeby mogę podać inne procedury dotyczące kodu. – medo0070
Komentarz ogólny: nie używaj "nowej liczby całkowitej (n)", zamiast tego użyj wyrażenia "Integer.valueOf (n)". Jest o wiele bardziej wydajny. – Tomas