2011-05-04 11 views
5

में कितने कार्य हैं यह देखने के लिए कि मैं अपने कोड में execors.newSingleThreadExecutor() का उपयोग कर रहा हूं। मैं कतार में कार्यों की संख्या की निगरानी करना चाहता हूं ताकि यह जांच सके कि प्रोसेसर संदेशों के साथ ओवरलोड नहीं किया गया है। मैं इलाज के पल के लिए कितने पूर्ण सबमिट किए गए कार्यों को प्राप्त नहीं कर सकता? मैं कुछ इस तरह की उम्मीद:निष्पादक। NewewingleThreadExecutor() - कतार

ExecutorService executor = Executors.newSingleThreadExecutor(); 
executor.submit(new Runnable() {...}); 
executor.submit(new Runnable() {...}); 
executor.submit(new Runnable() {...}); 
// do something and get 3 
... 
// do something and get 2 
... 
// do something and get 1 

धन्यवाद

+0

और मैं उद्धृत करता हूं, किसी भी समय किसी एक कार्य को सक्रिय नहीं किया जाएगा। हालांकि, आप जांच सकते हैं कि वर्तमान में सबमिट किए गए 'भविष्य' पर 'isDone()' को कॉल करके पूरा किया गया है या नहीं। – mre

+0

यहां http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29 – mKorbel

+2

"मैं उस प्रोसेसर को जांचने के लिए कतार में कार्यों की संख्या की निगरानी करना चाहता हूं संदेशों के साथ अधिभारित नहीं है "और यदि आप यही करने जा रहे हैं? –

उत्तर

6

बस मामले में आप गारंटी नहीं है कि यहां तक ​​कि JVM के नए संस्करण से कोड FlorianOver ने सुझाव दिया काम करेंगे चाहते हैं, आप इसे इस तरह कर सकता है: (मामले कि विधि Executors.newSingleThreadExecutor के लिए() होगा अब ThreadPoolExecutor प्रकार का उदाहरण नहीं लौटाएं)

ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); 

// ... 

int queueSize = executor.getQueue().size(); 
+0

+1, हमेशा इंटरफ़ेस को कोड। 'निष्पादक' में सभी उपयोगिता विधियों ने इंटरफ़ेस प्रकार 'एक्जिक्यूटर्स सेवा' या 'अनुसूचित एक्सप्लोरर सेवा' वापस कर दिया है, इसलिए 'निष्पादक' के कार्यान्वयन से कोई गारंटी नहीं है कि जो भी लौटाया गया है वह किसी भी विशिष्ट कार्यान्वयन से बढ़ाया जाएगा (भले ही केवल एक सार्वजनिक रूप से उपलब्ध कार्यान्वयन हो)। –

0

इसे इस तरह नहीं है?

((ThreadPoolExecutor) executor).getQueue().size(); 
+5

-1, गलत। यह 'ClassCastException' को' निष्पादक सेवा 'कार्यान्वयन के रूप में' निष्पादक सेवा 'कार्यान्वयन के रूप में' निष्पादक सेवा 'कार्यान्वयन के रूप में' निष्पादक सेवा 'के रूप में वापस लाएगा,' थ्रेडपूलएक्ससेलर '(' जावा 6 के बाद से) नहीं। –

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