मैं बहुत सारे चल रहे थ्रेड प्रबंधित करने के लिए जावा में ThreadPoolExecutor
का उपयोग कर रहा हूं। मैंने अपना खुद का सरल ThreadFactory
बनाया है, इसलिए मैं धागे को बेहतर नाम दे सकता हूं।ThreadPoolExecutor के साथ, थ्रेड पूल में चल रहे धागे का नाम कैसे प्राप्त करें?
मुद्दा यह है कि धागा पूल पहले सेट किए जाने पर थ्रेड में सेट हो जाता है और थ्रेड पूल वास्तव में चल रहा है कि कार्य से बंधे नहीं है। मैं इसे समझता हूं ... मेरे रननेबल्स और कॉलबेल - हालांकि उनके नाम हैं - वास्तव में ThreadPoolExecutor
के चल रहे थ्रेड से नीचे का एक स्तर है।
ThreadPoolExecutor
थ्रेड पूल के नाम बनाने के बारे में स्टैक ओवरव्लो पर कुछ अन्य प्रश्न हैं। (How to give name to a callable Thread? और How to name the threads of a thread pool in Java देखें।)
मैं क्या जानना चाहता हूं: क्या किसी के पास थ्रेड पूल थ्रेड के नाम को रननेबल के साथ समन्वयित करने के लिए एक अच्छा समाधान है जो वास्तव में चल रहा है?
अर्थात अगर मैं Thread.getCurrentThread().getName()
फोन मैं इसे नहीं थ्रेड पूल उच्च-स्तरीय के नाम वापस आना चाहते, बल्कि प्रतिदेय/Runnable का नाम है कि धागा अभी चल रहा है।
चूंकि यह मुख्य रूप से डिबगिंग और लॉगिंग उद्देश्यों के लिए है, इसलिए मैं ऐसे समाधान से बचने की कोशिश कर रहा हूं जिसमें मुझे प्रत्येक रननेबल में नया कोड डालने की कोशिश की जा रही है जो थ्रेडपूल एक्स्सेलर को सबमिट किया जा सकता है - मैंने बस कुछ कोड डाला ThreadFactory या ThreadPoolExecutor को स्वयं लपेटें ताकि परिवर्तन एक ही स्थान पर किया जा सके। यदि ऐसा समाधान मौजूद नहीं है तो शायद मैं परेशान नहीं होगा क्योंकि यह मिशन महत्वपूर्ण नहीं है।
संपादित शुरू स्पष्ट करने के लिए, मुझे पता है मैं हर Runnable के रन विधि की पहली पंक्ति के रूप में एक Thread.currentThread().setName("my runnable name");
रख सकते हैं, लेकिन मुझे लगता है कि ऐसा करने से बचने के लिए कोशिश कर रहा हूँ। मैं यहां एक पूर्णतावादी हूं, और मुझे इसका एहसास है, इसलिए अगर लोग इस प्रश्न पर टिप्पणी करना चाहते हैं और मुझे ऐसा बताना चाहते हैं तो मुझे नाराज नहीं होगा। अंत संपादित
मेरे अन्य सवाल है, मुझे लगता है, कि क्या लोगों को लगता है यह एक बुरा विचार ऐसा करने के लिए है। क्या मुझे इस तरह के थ्रेड पूल नाम को अपडेट करने से सावधान रहना चाहिए?
किसी भी सुझाव के लिए धन्यवाद!
"Runnable के साथ सिंक में थ्रेड पूल धागे के नाम रखते हुए कि यह वास्तव में चल रहा है" -> Runnable/प्रतिदेय नाम निर्धारित नहीं है, इसलिए मैं काफी अपने प्रश्न का जोर नहीं देख सकते । क्या आपका थ्रेड फैक्ट्री वास्तव में प्रत्येक थ्रेड को एक अलग नाम देता है? – serg10
ठीक है, मेरे प्रत्येक रननेबल्स और कॉलबल्स नामांकित इंटरफ़ेस को लागू करते हैं, इसलिए मेरे पास नामों तक पहुंच है। मुझे एहसास है कि मैं चुनौतीपूर्ण हूं कि मैंने अपने सभी रननेबल्स के लिए पहले से ही एक विशेष सुविधा लागू की है, लेकिन अतिरिक्त कोड जोड़ने से बचना चाहते हैं जो मैन्युअल रूप से थ्रेड नाम सेट करता है। –
स्पष्टता के लिए संपादित, कुछ "थ्रेड पूल" को "थ्रेड" में बदलना, और कुछ "थ्रेड" को "कार्य" में बदलना। –