मैं को अपने PQueue
के अंदर सेट करने का प्रयास कर रहा हूं। यह Maximum Waiting Time
PQueue
स्वचालित रूप से जांच करेगा यदि links
Maximum Waiting Time
से अधिक को हटाने के लिए प्रतीक्षा कर रहे हैं। मैंने अपने कोड में यह परिवर्तन किया है यह काम कर रहा है लेकिन यह लिंक हटाने के ठीक बाद रोक रहा है। मैं प्रतीक्षा समय की स्थिति के अनुसार अपने PQueue
से सभी तत्वों को हटाना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं यहां क्या खो रहा हूं?एक प्राथमिक संपत्ति के अनुसार प्राथमिकता Queue से तत्व कैसे निकालें?
यह मेरी कक्षा है:
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;
}
अपने सभी कोड के माध्यम से देखा नहीं है, लेकिन 'InterLinkCount' या' IntraLinkCount' पर सिंक्रनाइज़ करना काम नहीं करता है। आप बदलते रहते हैं कि वेरिएबल्स किस ऑब्जेक्ट को संदर्भित करते हैं, इसलिए अलग-अलग धागे एक ही ताले को प्राप्त नहीं करते हैं। – user2357112
@ user2357112 यह मेरी पूरी परियोजना नहीं है क्योंकि यह एक बड़ा कार्यक्रम है। यह इसका एक हिस्सा है। यदि आवश्यक हो तो मैं कोड के संबंध में अन्य प्रक्रियाएं प्रदान कर सकता हूं – medo0070
एक सामान्य टिप्पणी: 'Integer.valueOf (n)' का उपयोग करने के बजाय 'नया इंटीजर (एन)' का उपयोग न करें। यह बहुत अधिक कुशल है। – Tomas