2009-07-21 12 views
11

Un nostro cliente si lamenta che, saltuariamente, le nostre chiamate a FileChannel.map falliscono con un ClosedByInterruptException. Lo Javadoc non lo elenca come una possibilità legittima. Qualcuno sa cosa potrebbe succedere qui?Perché riceviamo ClosedByInterruptException da 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) 

risposta

18

Le operazioni di canale sono legate al thread che esegue le operazioni. Se questo thread viene interrotto, il flusso/canale viene chiuso a causa di problemi di sicurezza IO.

+0

Che tipo di operazioni risultano in un tale interrupt? Se volessi codificare un caso di prova, cosa avrei dovuto fare? Perché un thread può essere interrotto nel mezzo della mappatura di un file? E che mi dici di Claire? – bmargulies

+4

Se l'applicazione è multi-thread, è necessario cercare #interrupt() - chiamate che potrebbero interrompere il thread che esegue le operazioni IO sul canale. Se si tratta di un'applicazione Web o di un altro tipo di ambiente gestito, in cui la gestione dei thread non è adatta alla tua applicazione (come un contenitore Servlet/EJB), devi cercare le violazioni alla sicurezza dei thread. Un altro posto dove guardare è quando l'applicazione si sta spegnendo o quando si utilizza il pool di thread (Servlet/EJB Container!). Quindi sii consapevole della gestione dinamica delle dimensioni del pool! http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#interrupt() – cafebabe

3

L'ultimo commento contiene la risposta. C'era un pool di thread in uso e alle interruzioni di arresto venivano consegnati.

Problemi correlati