2011-05-25 15 views
7

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

मैं धागे का नाम कैसे बदलूं? यदि यह संभव नहीं है, तो कॉलबेल निष्पादित करने का एक और तरीका है कि मैं थ्रेडएस का नाम सेट कर सकता हूं?

+1

मैं सिर्फ इस दूसरे दिन पूछा - http://stackoverflow.com/questions/6113746/naming-threads-and-thread-pools-of-executorservice – mre

+0

@mre, हाँ, यह एक बहुत पूछा जाता है । –

+0

टी एल; डॉ उत्तर: http://stackoverflow.com/a/9748697/231917 – zengr

उत्तर

11

आप एक ExecutorService कार्यान्वयन है कि आप ThreadFactory1 धागे बनाने के लिए इस्तेमाल, उदाहरण के लिए, ThreadPoolExecutor स्थापित करने के लिए अनुमति देता है का उपयोग करना होगा। एक उदाहरण पास करें जो उचित नामों के साथ धागे बनाता है।

कॉमन्स-लैंग में एक आसान कक्षा भी है जो पैटर्न के साथ थ्रेड नाम निर्दिष्ट करने की अनुमति देती है: BasicThreadFactory। यह आपको नामकरण व्यवहार प्रदान करने के लिए ThreadFactory सबक्लास बनाने से रोकता है।

+0

+1, जावाडोक संदर्भ और सही/संक्षिप्त जवाब – mre

+0

के लिए वहाँ ThreadFactory इंटरफ़ेस के कुछ देशी जावा कार्यान्वयन है? –

+0

@ रेनाटो, एकमात्र सुलभ लाइब्रेरी कार्यान्वयन 'निष्पादक' उपयोगिता वर्ग से है और यह आपको नाम स्ट्रिंग की आपूर्ति करने की अनुमति नहीं देता है। –

5

गुवा लगभग हमेशा आपके पास need है। ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("my-sad-thread-%d").build() और इसे अपने ExecutorService पर पास करें।

3

एक त्वरित और गंदे तरीके;

public void run() { 
    Thread.currentThread().setName(aName); 
    doStuff(); 
} 
+1

यह मानता है कि आप थ्रेड की रन विधि बदल सकते हैं। –

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