यह काम
- यह SingleThreadExecutor से लिया गया है, लेकिन आप इसे आसानी से अनुकूलित कर सकते हैं
- जावा 8 लामदास कोड, लेकिन ठीक करना आसान है
यह एक एकल थ्रेड के साथ एक एक्सेक्यूटर बनाएगा, जिसमें बहुत सारे कार्य मिल सकते हैं; और अगले एक के साथ शुरू होने के लिए निष्पादन को समाप्त करने के लिए इंतजार करेंगे
Uncaugth त्रुटि या अपवाद के मामले में uncaughtExceptionHandler इसके शिकार हो सकते
सार्वजनिक अंतिम वर्ग SingleThreadExecutorWithException {
सार्वजनिक स्थैतिक निष्पादक सेवा NewSingleThreadExecutorWithException (अंतिम थ्रेड ।UncaughtExceptionHandler uncaughtExceptionHandler) {
थ्रेड फैक्ट्री फैक्ट्री = (रनने योग्य रननेबल) -> {
अंतिम थ्रेड newThread = नया थ्रेड (runnable, "SingleThreadExecutorWithException");
newThread.setUncaughtExceptionHandler ((अंतिम थ्रेड caugthTread, अंतिम फेंकने योग्य) -> {
uncaughtExceptionHandler.uncaughtException (caugthThread, फेंकने योग्य);
});
वापसी नईट्रेड;
};
नया फ़ाइनल करने योग्य
(नया थ्रेडपूल एक्ज़ीक्यूटर (1, 1,)
0 एल, टाइम यूनीट.मिलीसैंस,
नया लिंक्डब्लॉकिंग क्यू (),
कारखाना) {
संरक्षित शून्य afterExecute (Runnable runnable, Throwable फेंकने योग्य) {
super.afterExecute (runnable, throwable);
अगर (फेंकने योग्य == अशक्त और अस्थिर) भविष्य) {
प्रयत्न {
भावी भविष्य = (भविष्य में) चल सकने योग्य;
अगर (Future.isDone ()) {
future.get ();
}
} कैच (कैंसेलेशनएक्स अपवाद) {
फेंकने योग्य = CE;
} कैच (एक्सेप्शन एक्ससेप्शन ee) {
फेंकने योग्य = ee.getCause ();
} पकड़ (बाधित)
Thread.currentThread () बाधा ()।; // अनदेखा / रीसेट
}
}
अगर (फेंकने योग्य! = अशक्त) {
uncaughtExceptionHandler.uncaughtException (Thread.currentThread (), फेंकने योग्य);
}
}
});
}
निजी स्थिर वर्ग FinalizableDelegatedExecutorService
विस्तारित प्रतिनिधि अभियोजक सेवा {
FinalizableDelegatedExecutorService (ExecutorService निष्पादक) {
सुपर (निष्पादक);
}
संरक्षित शून्य अंतिम () {
super.shutdown ();
}
}
/ **
* एक रैपर क्लास जो केवल एक्सेकॉर्स सर्विस तरीकों को उजागर करता है
* एक निष्पादन सेवा के कार्यान्वयन।
* /
निजी स्थिर वर्ग DelegatedExecutorService का विस्तार करता है AbstractExecutorService {
निजी अंतिम ExecutorService ई;
DelegatedExecutorService (ExecutorService निष्पादक) {e = निष्पादक; }
public void execute (Runnable कमांड) {e.execute (कमांड); }
सार्वजनिक शून्य बंद () {e.shutdown (); }
सार्वजनिक सूची shutdownNow () {रिटर्न e.shutdownNow (); }
सार्वजनिक बूलियन हैशटडाउन () {वापसी e.isSutdown (); }
सार्वजनिक बूलियन को पृथक () {वापसी e.isTerminated (); }
सार्वजनिक बूलियन प्रतीक्षारत (लंबे समय तक, टाइम यूनिट इकाई)
थ्रो बाधित
वापसी ई.टाइटर्मिनेशन (टाइमआउट, यूनिट);
}
सार्वजनिक भविष्य का सबमिट (रन करने योग्य कार्य) {
वापसी e.submit (कार्य);
}
सार्वजनिक भविष्य का सबमिट (कॉल करने योग्य कार्य) {
वापसी e.submit (कार्य);
}
सार्वजनिक भविष्य का सबमिट (रन करने योग्य कार्य, T परिणाम) {
वापसी e.submit (कार्य, परिणाम);
}
सार्वजनिक सूची> invokeAll (संग्रह> कार्य)
थ्रो बाधित
वापसी e.invokeAll (कार्य);
}
सार्वजनिक सूची> invokeAll (संग्रह> कार्य,
लंबी समय सीमा, टाइम यूनिट इकाई)
थ्रो बाधित
वापसी e.invokeAll (कार्य, टाइमआउट, यूनिट);
}
सार्वजनिक T invokeAny (संग्रह> कार्य)
बाधा डालती है, अपवाद, अपवाद
वापसी e.invokeAny (कार्य);
}
public T invokeAny (संग्रह> कार्य,
लंबी समय सीमा, टाइम यूनिट इकाई)
थ्रो इंटरप्टेड अपवाद, एक्सेप्शन एक्ससेप्शन, टाइमआउट एक्ससेप्शन {
वापसी e.invokeAny (कार्य, टाइमआउट, यूनिट);
}
}
निजी एकलट्रेड एक्सिक्यूटरWithException () {}
}