कभी-कभी दोहराए गए कार्य की अवधि इसकी अवधि से अधिक लंबी होती है (मेरे मामले में, यह एक समय में घंटों के लिए हो सकती है) । एक दोहराए गए कार्य के बारे में सोचें जो चलाने में 7 मिनट लगते हैं और हर 10 मिनट में चलने के लिए निर्धारित होता है, लेकिन कभी-कभी कुछ घंटों के लिए प्रत्येक रन के लिए 15 मिनट लगते हैं।जावा में चलने वाले एकल-थ्रेडेड दोहराए जाने वाले शेड्यूल को शेड्यूल करें, लेकिन पिछली रन समाप्त नहीं होने पर मौजूदा रन को छोड़ दें
टाइमर और अनुसूचित थ्रेडपूल एक्स्सेलर कक्षाओं में एक शेड्यूल है एटफिक्स्डरेट विधि जो आमतौर पर इस प्रकार की कार्यक्षमता के लिए उपयोग की जाती है। हालांकि, दोनों में विशेषता है कि वे 'पीछे आने पर पकड़ने की कोशिश करते हैं'। दूसरे शब्दों में, यदि कोई टिमर कुछ निष्पादनों के पीछे पड़ता है, तो यह काम की कतार तैयार करता है जो लगातार तब तक काम करेगा जब तक कि यह तब तक नहीं चलता जब तक कि कोई भी कार्य अधिक समय से नहीं लेता निर्दिष्ट अवधि। यदि पिछले रन पूरा नहीं हुआ है तो मैं वर्तमान निष्पादन को छोड़कर इस व्यवहार से बचना चाहता हूं।
मेरे पास एक समाधान है जिसमें पूल किए गए निष्पादक के बाद निष्पादन विधि के साथ गड़बड़ करना, देरी का पुनर्मूल्यांकन करना, और नई देरी के साथ चलने योग्य को पुन: निर्धारित करना शामिल है, लेकिन यह सोच रहा था कि कोई आसान तरीका है या यदि यह कार्यक्षमता पहले से मौजूद है कहीं एक आम पुस्तकालय। मुझे निश्चित अवधि के बजाय निश्चित देरी के साथ शेड्यूलिंग के बारे में पता है, लेकिन यह मेरे लिए काम नहीं करेगा क्योंकि कार्यों को अपने निश्चित समय पर निष्पादित करने का प्रयास करना महत्वपूर्ण है। क्या मेरे निष्पादन समाधान के बाद से कोई आसान विकल्प है?
सरल है कि आपका कार्य जांचना है कि कोई अन्य उदाहरण पहले से चल रहा है, और यदि ऐसा है, तो तुरंत खुद को गोली मारो। –
@ हॉट लिक्स: अनुसूचितExecutorService वास्तव में उन्हें समानांतर में नहीं चलाता है। –
तो यहां मुख्य आवश्यकता क्या है? यह केवल ** और एक ** 10 मिनट के अंतराल पर हमेशा शुरू होता है, भले ही यह किसी को याद किया हो? यदि ऐसा है तो आप एक दर के बारे में बात नहीं कर रहे हैं। –