मैं एक तरीका है जिसके धारणात्मक, तरह दिखता है लिखने के लिए कैसे: अलग के साथ,interruptable तरीकों
Object longProcess1(Object o1) {
Object o2 = longSubProcess1(o1);
return longSubProcess2(o2);
}
बहुत आगे है और:
Object f(Object o1) {
Object o2 = longProcess1(o1);
Object o3 = longProcess2(o2);
return longProcess3(o3);
}
कहाँ प्रक्रियाओं खुद भी यौगिक हो सकता है विभिन्न मॉड्यूल में संभावित रूप से बैठे प्रक्रियाओं। अधिकांश प्रक्रियाएं लंबी हैं क्योंकि वे कम्प्यूटेशनल रूप से महंगा हैं, आईओ-बाउंड नहीं।
अब तक इतना अच्छा है, लेकिन अब मैं पूरी तरह से f
को बाधित करने के लिए चाहता हूं। The recommended Java way to do that समय-समय पर बाधित फ्लैग को Thread.interrupted()
के साथ जांचना है। यह बहुत सरल है, लेकिन यह जल्दी से बोझिल हो सकता है अगर मैं की तरह कुछ करने के लिए अपने तरीकों को बदलने की जरूरत:
Object f(Object o1) {
Object o2 = longProcess1(o1);
if (Thread.interrupted()) throw new InterruptedException();
Object o3 = longProcess2(o2);
if (Thread.interrupted()) throw new InterruptedException();
return longProcess3(o3);
}
Object longProcess1(Object o1) {
Object o2 = longSubProcess1(o1);
if (Thread.interrupted()) throw new InterruptedException();
return longSubProcess2(o2);
}
...
अब, मुझे लगता है कि की तरह काम करने के लिए समझते हैं तर्कसंगत - यह मुझे बेहतर नियंत्रण के लिए अनुमति देता है जब InterruptedException (उदाहरण के लिए) फेंक दिया जाएगा, असंगत राज्यों में वस्तुओं को छोड़ने से परहेज - लेकिन मुझे यह जानकर उत्सुकता है कि * करने का एक और शानदार तरीका है या नहीं।
* जावा में, AspectJ नहीं, जो मुझे लगता है कि यहां बहुत उपयुक्त है लेकिन मैं जावा के साथ फंस गया हूं।
मैं कोड है कि धागे कि एक दूसरे रेफरी शामिल साथ गतिरोध के बारे में चिंतित होगा। –