यह स्निपेट JCIP (ब्रायन गोएज़) से एक प्रविष्टि 6.15क्यों एक काम है कि एक थ्रेड पूल के धागे
f.get में भाग गया (की बाधा झंडा बहाल) InterruptedException और ExecutionException फेंकता है। अब, ये अपवाद भविष्य के लिए विशिष्ट हैं? मतलब भविष्य के प्रतिनिधित्व वाले विशिष्ट कार्य को बाधित किया गया था या आंतरिक अपवाद था।
प्रश्न -
मैं क्यों बाधा का उपयोग कर बहाल करने की जरूरत है "Thread.currentThread() बीच में()।"? , क्योंकि मेरे काम में धागे के लिए बाधा झंडा नहीं है? यह थोड़ा उलझन में है।
क्यों लंदन फेंकने योग्य अपवाद? अगर डाउनलोड इमेज में से कोई एक मुद्दा था, तो क्या हम यहां से डाउनलोड की गई अन्य डाउनलोड की गई छवियों को केवल फेंकने की प्रक्रिया नहीं कर सकते हैं और इस प्रकार शेष वायदा को संसाधित नहीं कर सकते हैं?
package net.jcip.examples; import java.util.*; import java.util.concurrent.*; import static net.jcip.examples.LaunderThrowable.launderThrowable; /** * Renderer * <p/> * Using CompletionService to render page elements as they become available * * @author Brian Goetz and Tim Peierls */ public abstract class Renderer { private final ExecutorService executor; Renderer(ExecutorService executor) { this.executor = executor; } void renderPage(CharSequence source) { final List<ImageInfo> info = scanForImageInfo(source); CompletionService<ImageData> completionService = new ExecutorCompletionService<ImageData>(executor); for (final ImageInfo imageInfo : info) completionService.submit(new Callable<ImageData>() { public ImageData call() { return imageInfo.downloadImage(); } }); renderText(source); try { for (int t = 0, n = info.size(); t < n; t++) { Future<ImageData> f = completionService.take(); ImageData imageData = f.get(); renderImage(imageData); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { throw launderThrowable(e.getCause()); } } interface ImageData { } interface ImageInfo { ImageData downloadImage(); } abstract void renderText(CharSequence s); abstract List<ImageInfo> scanForImageInfo(CharSequence s); abstract void renderImage(ImageData i); }
'त्रुटि' कुछ अप्राप्य होने वाला माना जाता है। 'StackOverflowError' के बारे में कैसे? ढेर शायद दूषित हो गया। 'InternalError' के बारे में कैसे? यह वीएम राज्य दूषित है। आप उन्हें पकड़ नहीं सकते हैं। –
हाँ आप सही हैं। यही वह जगह है जहां मैं OutOfMemoryError के साथ जा रहा था।हालांकि लॉंडर विधि रनटाइम अपवादों को भी पुनर्स्थापित करेगी (कम से कम उदाहरण में) –