2016-07-13 16 views
5

उपयोग करने के लिए मैं सिर्फ इस तरह एक कोड में भाग? अगर मैं इसे सही ढंग से समझता हूं, तो थ्रेड ट्रेडर उसी थ्रेड का उपयोग करता है जो सबमिट() कहता है, जिसका मतलब है कि इन सभी 10 "नौकरियां" मुख्य थ्रेड पर एक-एक करके चलती हैं।जब अमरूद sameThreadExecutor

for (int i = 0; i < 10; i++) { 
     try { 
     Do some work here... 
     } catch (final Exception e) { 
     throw e; 
     } finally { 
     // 
     } 
} 

धन्यवाद!

+3

यह वही है। एक सामान्य उपयोग-मामला यूनिट परीक्षण वर्ग है जहां आप जटिलता को एसिंक्रोनस निष्पादन को संभालने की इच्छा नहीं चाहते हैं। –

उत्तर

5

पहले, MoreExecutors#sameThreadExecutor अब मान्य नहीं है:

पदावनत।directExecutor() का उपयोग करें यदि आपको ListeningExecutorService की आवश्यकता है तो आपको केवल Executor और newDirectExecutorService() की आवश्यकता है। इस विधि अगस्त 2016

में निकाल दिया जाएगा तो सवाल यह है: जब आप MoreExecutors#directExecutor या MoreExecutors#newDirectExecutorService (अंतर के बीच उन दो कि ऊपर उल्लेख किया है - ListenableFuture रों लिए ListeningExecutorService अमरूद का विस्तार है) की आवश्यकता है। जवाब हैं:

  • यह उपयोग जब आप की जरूरत Executor/ExecutorService (। पूर्व अपने इंटरफेस की आवश्यकता है) और है संगामिति नहीं चाहता बल्कि अपने मल्टी-थ्रेडेड कोड तुल्यकालिक
  • (ऊपर से गर्भित) चलाने के लिए इसका इस्तेमाल उम्मीद के मुताबिक परिणाम
  • के लिए परीक्षण में आप साधारण को लागू करने के ExecutorServicenewDirectExecutorService खुद के द्वारा की तरह चाहते हैं जब, लेकिन है (its source code देखें)
  • पहिया बदलने की नहीं चाहते हैं, तो आप ListenableFuture##addCallback(ListenableFuture, FutureCallback) उपयोग कर रहे हैं, newDirectExecutorService डिफ़ॉल्ट रूप से प्रयोग किया जाता है ("for use when the callback is fast and lightweight", मुझे भी ntions यह "कुछ मामलों में एक खतरनाक पसंद है" (देखें javadoc))।
संबंधित मुद्दे