मुझे परीक्षण प्रयोजनों के लिए उसी "CurrentThreadExecutorService" का उपयोग करना था और, हालांकि सभी सुझाए गए समाधान अच्छे थे (विशेष रूप से एक अमरूद रास्ते का उल्लेख करते हुए ), मैं पीटर लॉरी द्वारा यहां सुझाए गए समान के साथ आया था ।
जैसा कि यहां एक्सल ज़िग्लर ने उल्लेख किया है , दुर्भाग्य से पीटर का समाधान वास्तव 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);
}
};
}