2011-12-17 20 views
5

में आवधिक ऑपरेशन के लिए थ्रेड.sleep(), टाइमर या प्लेटफ़ॉर्म क्रॉन जॉब का उपयोग करें मेरे पास एक जावा ईई एप्लिकेशन है जो हर पंद्रह मिनट में इंटरनेट से स्टॉक की कीमतें डाउनलोड करता है। एक समय सटीकता परिप्रेक्ष्य से इस आवधिक ऑपरेशन को आंतरिक बनाने के लिए आवेदन सबसे अच्छा है यानी काउंटर के साथ संयोजन में Thread.sleep() का उपयोग करें या टाइमर सेट करें या यूआरएल के माध्यम से कार्य को बेनकाब करना बेहतर होगा और एक प्लेटफॉर्म क्रॉन जॉब यूआरएल हिट करेगा समय-समय पर (पाठ्यक्रम की आवश्यक आवृत्ति पर)।जावा ईई अनुप्रयोग

दोनों दृष्टिकोणों के पेशेवरों और विपक्ष क्या हैं?

मुझे ओपनजेडीके कार्यान्वयन के खिलाफ रिपोर्ट किए गए टाइमर बग द्वारा देखा गया है। बग ने कहा कि सिस्टम समय में बदलाव ने समय से संबंधित संचालन और नींद और टाइमर आवधिकता जैसे तरीकों के संचालन को प्रभावित किया।

+1

आप क्वार्ट्ज उपयोग करने पर विचार करना चाहिए। – fge

+0

कोई भी सिस्टम समय क्यों बदल देगा? –

+0

संबंधित: http://stackoverflow.com/questions/7499534/applicationscope-bean-that-uses-a-timertask- शेड्यूलर- good-or-bad/7499769#7499769 और http://stackoverflow.com/questions/5357033/पृष्ठभूमि-टाइमर-कार्य-इन-जेएसपी-सर्वलेट-वेब-एप्लिकेशन/5357856 # 5357856 – BalusC

उत्तर

1

निश्चित रूप से कार्य के लिए बनाए गए शेड्यूलिंग नौकरी का उपयोग करने पर विचार करें। किसी भी समय के विचारों से कार्य को स्वयं कोशिश करें और विभाजित करें।

  • जैसा कि सुझाव दिया गया था, क्वार्ट्ज एक अच्छी पसंद है।
  • क्रॉन खराब नहीं है, लेकिन आपके कार्य के साथ एकीकृत करने के लिए और अधिक सेटअप की आवश्यकता होगी।
  • यदि जावा ईई पर आप एक ईजेबी टाइमर का उपयोग कर सकते हैं।
  • आप ScheduledExecutorService साथ अपने स्वयं के रोल कर सकते हैं (अनुशंसित नहीं)
1

Thread.sleep समय-समय पर कोड निष्पादित करने का एक अनुशंसित तरीका नहीं है। यह गलत है और आमतौर पर खराब डिजाइन का संकेत है। मेरा सुझाव है कि आप समय-समय पर कोड निष्पादित करने के लिए Timer कक्षा का उपयोग करें।

2

Timer बहिष्कृत नहीं किया गया है, लेकिन अब एक बेहतर विकल्प मौजूद है: SheduledExecutorService। यह बेहतर बनाता है कि यह शेड्यूलिंग के लिए पूर्ण समय के बजाय सापेक्ष समय का उपयोग करता है।

बाहरी क्रॉन स्क्रिप्ट या आंतरिक टाइमर का उपयोग करना केवल एक मामला या प्राथमिकता है, IMHO। एक आंतरिक टाइमर सेटअप करना आसान है, लेकिन यदि आपके पास पहले से ही अन्य क्रॉन हैं, तो आप एक अतिरिक्त का उपयोग करना चाहेंगे और यह जिम्मेदारी एक ही स्थान पर कर सकते हैं।

संबंधित मुद्दे