2009-07-21 10 views
11

हमारे एक ग्राहक शिकायत करते हैं कि, sporadically, FileChannel.map पर हमारी कॉल ClosedByInterruptException के साथ विफल हो जाती है। Javadoc इसे वैध संभावना के रूप में सूचीबद्ध नहीं करता है। क्या किसी को पता है कि यहां क्या हो रहा है?हम Java 1.6 में FileChannel.map से ClosedByInterruptException क्यों प्राप्त कर रहे हैं?

 
Cause0: java.nio.channels.ClosedByInterruptException 
Cause0-StackTrace: 
at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:184) 
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:772) 

उत्तर

18

चैनल संचालन संचालन करने वाले धागे से बंधे हैं। यदि यह धागा बाधित है, तो IO सुरक्षा समस्याओं के कारण स्ट्रीम/चैनल बंद है।

+0

इस प्रकार के बाधाओं के किस तरह के संचालन का परिणाम होता है? अगर मैं एक टेस्ट केस कोड करना चाहता था, तो मैं यह क्या करूँगा? एक फ़ाइल मैपिंग के बीच में धागा क्यों बाधित हो सकता है? और क्लेयर के बारे में क्या? – bmargulies

+4

यदि एप्लिकेशन बहु-थ्रेडेड है, तो आपको # अंतराल() - कॉलों की तलाश करनी चाहिए जो चैनल पर आईओ संचालन करने वाले थ्रेड को बाधित कर सकती हैं। यदि यह एक वेब-एप्लिकेशन या किसी अन्य प्रकार का प्रबंधित वातावरण है, जहां थ्रेड प्रबंधन आपके एप्लिकेशन पर नहीं है (जैसे सर्वलेट/ईजेबी कंटेनर), तो आपको थ्रेड-सुरक्षा उल्लंघनों की तलाश करनी चाहिए। यह देखने के लिए एक और जगह है कि एप्लिकेशन बंद हो रहा है या जब थ्रेड पूलिंग का उपयोग किया जाता है (सर्वलेट/ईजेबी कंटेनर!)। फिर पूल आकार के गतिशील प्रबंधन से अवगत रहें! http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#interrupt() – cafebabe

3

अंतिम टिप्पणी में उत्तर शामिल है। उपयोग में एक थ्रेड पूल था, और शटडाउन इंटरप्ट पर वितरित किया गया था।