2009-12-25 14 views

उत्तर

28

व्यवहार के बीच क्या अंतर है, काफी कुछ नहीं।

हालांकि, एक बार आपके पास Executor उदाहरण है, तो आप इसमें कई कार्य सबमिट कर सकते हैं, और उन्हें एक के बाद एक निष्पादित कर सकते हैं। आप इसे कच्चे Thread के साथ नहीं कर सकते हैं।

+0

ओह हाँ, यह सही है, इसके बारे में भी सोचा नहीं था। धन्यवाद। –

11

कोई त्रुटि या RuntimeException निर्वाहक यह चुपचाप निगल लिया हो जाएगा में फेंक दिया जाता है, तो नया धागा()

15

एक उल्लेखनीय अंतर System.err करने के लिए इसे प्रिंट होगा, जब आप new Thread(someRunnable).start(); चलाने जब runnable समाप्त हो गया है धागा चुपचाप मर जाएगा।

हालांकि निष्पादक तब तक जारी रहेगा जब तक आप इसे बंद नहीं करते। तो Executors.newSingleThreadExecutor().execute(command) चलाते समय जब आपको लगता है कि आपका एप्लिकेशन या JVM समाप्त हो सकता है तो निष्पादक अभी भी पृष्ठभूमि थ्रेड में चल रहा है।

+0

स्पष्ट रूप से मामला नहीं: https://www.farside.org.uk/201309/learning_from_bad_code – assylias

+0

दिलचस्प, मैं जो कुछ कहता हूं उससे बहस नहीं कर सकता। मैं 'सबमिट' पूर्ण होने के बाद 'अंतिमकरण' कॉल को फिर से नहीं बना सकता। मैंने एक साधारण 'मुख्य' टेस्ट चलाया और प्रतिनिधि टीपीई कभी जीसीड नहीं किया गया। –

+0

मैंने ईमानदार होने के लिए इसका परीक्षण नहीं किया है। – assylias

0

निष्पादक। NewewingleThreadExecutor()। Execute (कमांड) पहले निर्मित धागे का पुन: उपयोग करेगा, यह नए थ्रेड() के मामले में नया धागा नहीं बनाएगा। यदि थ्रेड जो साठ सेकंड के लिए उपयोग नहीं किया गया है, तो यह एक प्रकार का पूल है जिसमें एक सिंगल थ्रेड होता है जो इसके बराबर नया फिक्स्ड थ्रेडपूल (1) बनाता है।

0

मैं एकल अंक धागे के लिए भी ExecutorService या ThreadPoolExecutor का उपयोग करना पसंद करता हूं। वे अधिक लचीलापन प्रदान करते हैं।

java Fork/Join pool, ExecutorService and CountDownLatch

Java's Fork/Join vs ExecutorService - when to use which?

मान लें कि आप के बजाय अपने खुद के धागे ExecutorService साथ शुरू कर दिया है:

संबंधित एसई सवालों में ExecutorService & ThreadPoolExecutor वर्गों पर एक नज़र डालें। भविष्य में, यदि एकाधिक धागे का समर्थन करने की आवश्यकता है, ExecutorService या ThreadPoolExecutor आपके लिए बेहतर नियंत्रण और लचीलापन प्रदान करेगा। आप नीचे दिए गए एपीआई में आवश्यक पैरामीटर को ठीक-ठीक कर सकते हैं।

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, 
RejectedExecutionHandler handler) 
संबंधित मुद्दे