ThreadPoolExecutor သုံးတဲ့ Queue က Blocking Queue အမျိုးအစားဝင်တွေထဲက ဖြစ်ပါတယ်။
ExecutorService pool = Executors.newFixedThreadPool(10);
ဒါက သူ့ default constructor ကိုခေါ်ထားတာ။
return new ThreadPoolExecutor( nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>() );
ThreadPoolExecutors ဆိုတာက utility class ဖြစ်ပြီးတော့ ဒီနေရာမှာ သူ့ရဲ့ Blocking Queue အမျိုးအစားက LinkedBlockingQueue ကို default အနေနဲ့သုံးတာပါ။ အထက်ဖေါ်ပြပါ code က newFixedThreadPool(10) လို့ခေါ်လိုက်ရင် ထွက်လာမယ့် Executor object ပါ။ LinkedBlockingQueue ကိုနောက်များမှ ဖေါ်ပြပါ့မယ်။
ExecutorService executor = Executors.newCachedThreadPool();
ဒါက သူ့ default constructor ကိုခေါ်ထားတာ။
return new ThreadPoolExecutor( 0, // corePoolSize Integer.MAX_VALUE, // maximumPoolSize 60L, TimeUnit.SECONDS, // idle threads die after 60s new SynchronousQueue<Runnable>() // workQueue );
ဒီတခါလည်း ThreadPoolExecutor ကို သုံးပြီး SynchronousQueue ကို default အနေနဲ့ သုံးထားတာကို တွေ့ရမှဖြစ်ပါတယ်။
ExecutorService executor = Executors.newSingleThreadExecutor();
ဒါက သူ့ default constructor ကိုခေါ်ထားတာ။
return new FinalizableDelegatedExecutorService( new ThreadPoolExecutor( 1, // corePoolSize 1, // maximumPoolSize 0L, TimeUnit.MILLISECONDS, // no idle timeout new LinkedBlockingQueue<Runnable>() // task queue ) );
ဒါက ThreadPoolExecutorService ထဲက သူ့ရဲ့ implementation ဖြစ်ပါတယ်။
ပြန်ကြည့်မယ်ဆိုရင်
newFixedThreadPool က LinkedBlockingQueue
newCachedThreadPool က SynchronousQueue
newSingleThreadExecutor က LinkedBlockingQueue
ဆိုတဲ့ Queue Data Structures တွေကို သုံးသွားတာကို မြင်တွေ့နိုင်မှာဖြစ်ပါတယ်။
Top comments (0)