2009-07-21 6 views
11

Un cliente nuestro se queja de que, esporádicamente, nuestras llamadas al FileChannel.map fallan con un ClosedByInterruptException. El Javadoc no muestra esto como una posibilidad legítima. ¿Alguien sabe lo que podría estar pasando aquí?¿Por qué obtenemos ClosedByInterruptException de FileChannel.map en 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) 

Respuesta

18

Las operaciones del canal están vinculadas al hilo que realiza las operaciones. Si este hilo se interrumpe, el flujo/canal se cierra debido a problemas de seguridad de E/S.

+0

¿Qué tipo de operaciones resultan en dicha interrupción? Si quisiera codificar un caso de prueba, ¿qué haría que hiciera? ¿Por qué se puede interrumpir un hilo en el medio de mapear un archivo? ¿Y qué hay de Claire? – bmargulies

+4

Si la aplicación tiene varios subprocesos, debería buscar #interrumpir() - llamadas que podrían interrumpir el hilo al hacer las operaciones IO en el canal. Si se trata de una aplicación web o algún otro tipo de entorno administrado, donde la administración de subprocesos no corresponde a su aplicación (como un contenedor Servlet/EJB), debe buscar violaciones de seguridad de subprocesos. Otro lugar para mirar es cuando la aplicación se está cerrando o cuando se usa la agrupación de subprocesos (Servlet/EJB Container!). ¡Entonces tenga en cuenta la gestión dinámica del tamaño de la agrupación! http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#interrupt() – cafebabe

3

El último comentario contiene la respuesta. Hubo un grupo de subprocesos en uso y en el momento de la interrupción se entregaron las interrupciones.

Cuestiones relacionadas