2012-08-22 7 views
5

जावाडोक कहता है कि Executors.newCachedThreadPool द्वारा लौटाई गई सेवा थ्रेड का पुन: उपयोग करती है। यह कैसे संभव है? एक धागा केवल start पर कॉल करके एक बार शुरू किया जा सकता है। तो वे इसे कैसे कार्यान्वित करते हैं? इस सेवा के थ्रेड एक अनंत लूप में चल रहे हैं और उनकी Runnable-मांग पर प्रतिस्थापित हैं?कैसे नया कैच किया गया थ्रेडपूल थ्रेड का पुन: उपयोग करता है?

उत्तर

4

एक रननेबल एक और रननेबल कॉल कर सकता है।

प्रत्येक थ्रेड केवल एक मुख्य रननेबल चलाता है, लेकिन यह रननेबल साझा अवरुद्धक्यूयू से रननेबल लेता है और इसे बंद होने तक कॉल करता है।

यह सरलीकृत करता है।

final BlockingQueue<Runnable> queue = ... 

Runnable runs = new Runnable() { public void run() { 
    while(running) 
     queue.take().run(); 
}}; 

आप यह देखने के लिए कोड को पढ़ सकते हैं कि यह वास्तव में यह कैसे करता है।

+1

मैं अनुमान लगा सकता था ... हस्ताक्षर भी इस कार्यक्षमता का सुझाव देता है। – zeller

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