मेरे पास एक बहु थ्रेडेड क्लाइंट सर्वर एप्लिकेशन है जो सॉकेट का उपयोग करता है। जब कोई नया कनेक्शन पाया जाता है, तो नए निष्पादक थ्रेड पूल का उपयोग करके आगे निष्पादन को नए धागे में स्थानांतरित कर दिया जाता है।थ्रेड.सेटनाम (नाम) चेतावनी
मैं उस क्लाइंट के लिए सभी लॉगिंग स्टेटमेंट में क्लाइंट आईडी लॉग करना चाहता हूं। समस्या यह है कि मैं क्लाइंट आईडी को पास करने के लिए विधि हस्ताक्षर संशोधित नहीं करना चाहता हूं।
समाधान है कि मैं के बारे में सोचा हैं:
- ग्राहक मूल्य धारण करने के लिए ThreadLocal का उपयोग करना।
- रन() में, मैं क्लाइंट आईडी को Thread.currentThread()। SetName (clientId) का उपयोग करके थ्रेड में सेट कर सकता हूं;
पहले व्यक्ति को काम करना चाहिए। लेकिन मुझे दूसरा विकल्प पसंद है क्योंकि ए। मैं ग्राहक आईडी को डीबगर बी से पा सकता हूं। थ्रेड नाम दिखाने के लिए लॉगर लाइब्रेरी को कॉन्फ़िगर किया जा सकता है। तो लॉग विवरणों में कोई बदलाव की आवश्यकता नहीं होगी और यह पुस्तकालयों के अंदर लॉगर्स के लिए भी काम करेगा।
javadoc में उल्लिखित थ्रेड.सेटनाम() का उपयोग करने के लिए चेतावनी क्या हैं? यह प्रदर्शन को कैसे प्रभावित करता है? Thread.setName() को कॉल करने की चोटी आवृत्ति लगभग 200 प्रति सेकेंड होगी और 0.3 प्रति सेकेंड औसत होगी।
के लिए धन्यवाद यह साफ दिखता है। मैं इसे आजमाऊंगा। धन्यवाद! – Dojo