J'ai un thread natif qui doit appeler Java. Pour cela, je dois attacher le fil à la machine virtuelle en utilisant AttachCurrentThread
. Puisque ce rappel arrivera assez souvent, le thread devrait probablement rester attaché. L'appel AttachCurrentThread
plusieurs fois est très bien (« Essayer d'attacher un fil qui est déjà attaché est un non-op. »)Dois-je JNI détacher un thread attaché?
Dois-je appeler DetachCurrentThread
avant que les sorties de fil, cela arrivera automatiquement, ou est-ce même pas Champs obligatoires? Que se passe-t-il si je dois appeler détachement, mais ne le fais pas? Est-ce que cela «fuirait» ou pourrait-il même corrompre l'état de la machine virtuelle?
J'ai vérifié la spécification Java Native Interface, mais soit l'ai manquée, soit elle n'est pas spécifiée.
Ma question s'applique spécifiquement à Sun JDK 6 sur Windows XP.
Darn, je regardais la spécification JDI JDK5 tout le temps. La section "Détacher de la machine virtuelle" est nouvelle dans les documents JDK6. Merci de votre aide! –
Je souhaite qu'il y ait plus d'explications sur * pourquoi * il doit appeler DetachCurrentThread(). Si le thread natif est connecté en tant que démon, la machine virtuelle n'attendra pas le thread natif attaché pour terminer. – technomage