PQueue
benim Maximum Waiting Time
ayarlamaya çalışıyorum. Bu Maximum Waiting Time
, links
Maximum Waiting Time
'dan daha fazlasını bekliyorsa otomatik olarak PQueue
'u kontrol edecektir. Bu değişiklikleri kodumda çalıştım ama bağlantıyı kaldırdıktan hemen sonra duruyor. Tüm öğeleri PQueue
'dan bekleme süresi durumuna göre kaldırmak istiyorum. Bana neyi kaçırdığımı söyler misin?Öğe Özelliğine Göre PriorityQueue öğelerini nasıl kaldırılır?
Bu benim sınıftır:
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;
}
tüm kodu ile bakmıyorlar mı
, ancak 'InterLinkCount' veya 'IntraLinkCount' üzerinde senkronizasyon çalışmıyor. Bu değişkenlerin hangi nesneye başvurduğunu değiştirmeye devam edersiniz, bu yüzden farklı iş parçacıkları aynı kilitleri alamaz. – user2357112@ user2357112 Bu benim büyük bir program olduğu için tüm projem değil. Bu onun bir parçası. Gerekirse kodla ilgili diğer prosedürleri sağlayabilirim – medo0070
Genel bir yorum: 'new Integer (n)' kullanmayın, bunun yerine 'Integer.valueOf (n)' kullanın. Bu çok daha verimli. – Tomas