2011-06-05 5 views
8

हमारे पास जावा एप्लिकेशन है जो अनुरोधों को संसाधित करता है। स्वाभाविक रूप से, धागे के साथ एक थ्रेड पूल होता है जिसमें "प्रोसेसर -1", "प्रोसेसर -2" जैसे कुछ महत्वहीन नाम होते हैं। हम सोच रहे हैं कि हर बार प्रसंस्करण धागे का नाम बदलने का अच्छा विचार है जो इंगित करेगा कि कौन सा अनुरोध संसाधित किया जा रहा है।जावा में प्रोसेसिंग थ्रेड के नामों को गतिशील रूप से बदलने का अच्छा विचार है?

मुझे एहसास है कि इसके बारे में कुछ गलत है, लेकिन एक अच्छे कारण के बारे में नहीं सोच सकता। मैं थ्रेड डंप से बहु-थ्रेडिंग मुद्दों का विश्लेषण करने के कई मामलों को याद कर सकता हूं और यह जानना मेरे लिए बहुत महत्वपूर्ण था कि मैं लगातार दो डंप में एक ही धागा देखता हूं या नहीं। हालांकि, मुझे एहसास हुआ कि मैं इसके बजाय थ्रेड आईडी देख सकता हूं। Log4j लॉग में थ्रेड नाम लिखना एक आम प्रथा है और मुझे इसके द्वारा फ़िल्टर करने के कई मामलों को याद है। लेकिन फिर भी मुझे यकीन नहीं है कि मेरे यहां एक अच्छी "रक्षा की रेखा" है।

सामान्य अभ्यास क्या है? क्या धागे का नाम बदलना अच्छा विचार है?

Renaming Threads in Java या Should threads in Java be named for easier debugging? जैसे संबंधित प्रश्न हैं लेकिन वे इस विशिष्ट समस्या को संबोधित नहीं करते हैं।

+0

Thread.getId वास्तव में अच्छा है। जैसा कि आप फिट देखते हैं, धागे का नाम बदलें, जानकारी पूरी तरह से डिबगिंग के लिए है और यह सिर्फ थ्रेड क्लास में 'char [] name' फ़ील्ड है। – bestsss

+0

यह ठीक करने के लिए डिबगिंग के लिए है, अन्यथा – MeBigFatGuy

+0

@MeBigFatGuy नहीं, अलग-अलग डिबगिंग/प्रोफाइलिंग थ्रेड नामों का कोई उद्देश्य नहीं है (और आंतरिक रूप से उपयोग नहीं किया जाता है) – bestsss

उत्तर

3

मैं प्रत्येक थ्रेड को सार्थक, लेकिन गतिशील रूप से बदल नहीं सकता, नाम।

किस अनुरोध पर संसाधित किया जा रहा है, इस बारे में जानकारी संग्रहीत करना ठीक लगता है, लेकिन थ्रेड नाम में संग्रहीत करना गंध करता है। आप उस जानकारी को लॉग कर सकते हैं, या इसे ThreadLocal में संग्रहीत कर सकते हैं, या ...?

+1

थ्रेडलोकल डीबगिंग (कम से कम आसानी से नहीं) के साथ काम नहीं करता है। – bestsss

4

यह एक अच्छा विचार है।

थ्रेड नाम का एकमात्र उद्देश्य निदान के लिए है, इसलिए आपको थ्रेड का नाम बदलने/नाम बदलने के लिए प्रोत्साहित किया जाता है जो आपको रनटाइम पर क्या हो रहा है समझने में मदद करता है।

विशेष रूप से थ्रेड पूल में धागे के लिए। उनकी पहचान अर्थहीन हैं। यह कार्यात्मक रूप से प्रति कार्य एक नया धागा के बराबर है। हम केवल कार्य नामों के बारे में परवाह करते हैं, और थ्रेड नाम एक कार्य नाम संग्रहीत करने के लिए एक सुविधाजनक स्थान है।

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