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)
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
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