2009-07-21 6 views
11

Un de nos clients se plaint que, sporadiquement, les appels à FileChannel.map échouent avec un ClosedByInterruptException. Le Javadoc ne mentionne pas cela comme une possibilité légitime. Est-ce que quelqu'un sait ce qui pourrait se passer ici?Pourquoi obtenons-nous ClosedByInterruptException de FileChannel.map dans 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) 

Répondre

18

Les opérations de canal sont liées au thread effectuant les opérations. Si ce thread est interrompu, le flux/canal est fermé en raison de problèmes de sécurité IO.

+0

Quel type d'opérations entraîne une telle interruption? Si je voulais coder un cas de test, que ferais-je? Pourquoi un thread peut-il être interrompu au milieu de la cartographie d'un fichier? Et pour Claire? – bmargulies

+4

Si l'application est multithread, vous devez rechercher les appels #interrupt() qui peuvent interrompre le thread effectuant les opérations d'E/S sur le canal. S'il s'agit d'une application Web ou d'un autre type d'environnement géré, où la gestion des threads n'est pas à la hauteur de votre application (comme un conteneur Servlet/EJB), vous devez rechercher les violations de sécurité des threads. Un autre endroit à regarder est lorsque l'application est en cours d'arrêt ou lorsque le pool de threads est utilisé (Servlet/EJB Container!). Alors soyez conscient de la gestion dynamique de la taille du pool! http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#interrupt() – cafebabe

3

Le dernier commentaire contient la réponse. Il y avait un pool de threads en cours d'utilisation, et à l'arrêt les interruptions ont été livrées.

Questions connexes