2009-07-21 2 views
11

Ein Kunde von uns beschwert sich, dass sporadisch Anrufe von uns an FileChannel.map mit einem ClosedByInterruptException scheitern. Die Javadoc listet dies nicht als legitime Möglichkeit auf. Weiß jemand, was hier vor sich geht?Warum erhalten wir ClosedByInterruptException von FileChannel.map in Java 1.6?

 
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) 

Antwort

18

Kanaloperationen sind an den Thread gebunden, der die Operationen ausführt. Wenn dieser Thread unterbrochen wird, wird der Stream/Kanal aufgrund von IO-Sicherheitsproblemen geschlossen.

+0

Welche Operationen führen zu einem solchen Interrupt? Wenn ich einen Testfall programmieren möchte, was würde ich tun? Warum kann ein Thread mitten in der Zuordnung einer Datei unterbrochen werden? Und was ist mit Claire? – bmargulies

+4

Wenn die Anwendung multi-threaded ist, sollten Sie nach #interrupt() suchen - Aufrufe, die möglicherweise den Thread unterbrechen, der die IO-Vorgänge auf dem Kanal ausführt. Wenn es sich um eine Webanwendung oder eine andere Art von Verwaltungsumgebung handelt, bei der die Threadverwaltung nicht für Ihre Anwendung geeignet ist (wie ein Servlet/EJB-Container), sollten Sie nach Thread-Sicherheitsverletzungen suchen. Ein anderer Ort, an dem Sie suchen können, ist, wann die Anwendung heruntergefahren wird oder wann das Thread-Pooling verwendet wird (Servlet/EJB-Container!). Dann achten Sie auf die dynamische Verwaltung der Poolgröße! http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#interrupt() – cafebabe

3

Der letzte Kommentar enthält die Antwort. Es wurde ein Threadpool verwendet, und beim Herunterfahren wurden Interrupts zugestellt.

Verwandte Themen