আমাদের বেশিরভাগ ব্যবহার করা থ্রেড-পুলগুলির ThreadPoolExecutor
পিছনে থাকা ডিফল্ট আচরণে আমি কিছু সময়ের জন্য হতাশ হয়েছি ExecutorService
। জাভাদোকস থেকে উদ্ধৃতি দিতে:
আরো corePoolSize চেয়ে কিন্তু চেয়ে maximumPoolSize থ্রেড চলমান কম হয়, তাহলে একটি নতুন থ্রেড তৈরি করা হবে শুধুমাত্র যদি কিউ পূর্ণ ।
এর অর্থ হ'ল আপনি যদি নীচের কোডটি দিয়ে কোনও থ্রেড পুলটি সংজ্ঞায়িত করেন তবে এটি কখনই দ্বিতীয় থ্রেড শুরু করবে না কারণ LinkedBlockingQueue
সীমাহীন is
ExecutorService threadPool =
new ThreadPoolExecutor(1 /*core*/, 50 /*max*/, 60 /*timeout*/,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(/* unlimited queue */));
কেবলমাত্র যদি আপনার সীমাবদ্ধ সারি থাকে এবং সারিটি পূর্ণ থাকে তবে মূল সংখ্যার উপরে যে কোনও থ্রেড শুরু হবে। আমি সন্দেহ করি যে বিপুল সংখ্যক জুনিয়র জাভা মাল্ট্রিথ্রেড প্রোগ্রামাররা তাদের এই আচরণ সম্পর্কে অসচেতন ThreadPoolExecutor
।
এখন আমার নির্দিষ্ট ব্যবহারের কেস রয়েছে যেখানে এটি অনুকূল নয়। আমি নিজের টিপিপি ক্লাসটি না লিখে এটিকে ঘিরে কাজ করার উপায় খুঁজছি।
আমার প্রয়োজনীয়তাগুলি এমন কোনও ওয়েব পরিষেবার জন্য যা সম্ভবত অবিশ্বাস্য তৃতীয় পক্ষকে কল-ব্যাক করে।
- আমি ওয়েব-অনুরোধের সাথে সিঙ্ক্রোনালি কল-ব্যাক করতে চাই না, তাই আমি একটি থ্রেড-পুল ব্যবহার করতে চাই।
- আমি সাধারণত এক মিনিটের মধ্যে এই দুটি পাই তাই আমি
newFixedThreadPool(...)
বেশিরভাগ সুপ্ত থাকা থ্রেডের সাথে একটি রাখতে চাই না । - প্রতিবার প্রায়শই আমি এই ট্র্যাফিকের বিস্ফোরণ ঘটায় এবং আমি থ্রেডের সংখ্যাটি সর্বাধিক মান পর্যন্ত বাড়িয়ে তুলতে চাই (আসুন 50 বলি)।
- আমার সমস্ত কলব্যাক করার জন্য সর্বোত্তম চেষ্টা করা দরকার যাতে আমি 50 এর উপরে যে কোনও অতিরিক্ত ক্রিয়াকলাপ করতে চাই
newCachedThreadPool()
।
আরও থ্রেড শুরুর আগেThreadPoolExecutor
যেখানে সারি সীমাবদ্ধ করা এবং পূর্ণ হওয়া দরকার সেখানে এই সীমাবদ্ধতার আশেপাশে আমি কীভাবে কাজ করতে পারি ? কাজগুলি সারি করার আগে আমি আরও থ্রেড শুরু করতে কীভাবে এটি পেতে পারি ?
সম্পাদনা করুন:
ThreadPoolExecutor.allowCoreThreadTimeOut(true)
মূল থ্রেডের সময়সীমা শেষ হওয়ার এবং প্রস্থান করার জন্য @ ফ্লাভিও একটি ভাল ধারণা দেয়। আমি এটি বিবেচনা করেছি কিন্তু আমি এখনও মূল থ্রেড বৈশিষ্ট্য চাই। আমি চাইনি যে পুলে থ্রেডের সংখ্যা সম্ভব হলে মূল-আকারের নীচে নেমে যায়।