পরীক্ষার উদ্দেশ্যে আমাকে একই "কারেন্টথ্রেডএ্যাক্সেকিউটারস সার্ভিস" ব্যবহার করতে হয়েছিল এবং যদিও সমস্ত প্রস্তাবিত সমাধানগুলি দুর্দান্ত ছিল (বিশেষত এককটি পেয়ারা পথের উল্লেখ করে ), আমি পিটার লরিকে এখানে যে পরামর্শ দিয়েছিল তার অনুরূপ কিছু নিয়ে এসেছি ।
Axelle Ziegler উল্লেখ হিসাবে এখানে , দুর্ভাগ্যবশত পিটার্স সমাধান আসলে না চেক চালু কারণ কাজ করবে ThreadPoolExecutor
উপর maximumPoolSize
কন্সট্রাকটর প্যারামিটার (অর্থাত maximumPoolSize
হতে পারে না <=0
)।
এটি রোধ করার জন্য, আমি নিম্নলিখিতগুলি করেছি:
private static ExecutorService currentThreadExecutorService() {
CallerRunsPolicy callerRunsPolicy = new ThreadPoolExecutor.CallerRunsPolicy();
return new ThreadPoolExecutor(0, 1, 0L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), callerRunsPolicy) {
@Override
public void execute(Runnable command) {
callerRunsPolicy.rejectedExecution(command, this);
}
};
}