У меня есть некоторый собственный поток, который должен звонить в Java. Для этого я должен присоединить поток к использованию VM AttachCurrentThread
. Так как этот обратный вызов произойдет довольно часто, поток должен, вероятно, остаться приложенным. Вызов AttachCurrentThread
многократно прекрасен ("Пытающийся присоединить поток, который уже присоединяется, не".)
Сделайте я должен звонить DetachCurrentThread
перед выходами потока это произойдет автоматически, или это даже не требуется? Что происходит, если я должен назвать отсоединение, но сделать нет? Это просто "протекло" бы, или мог это ровное повреждение состояние VM?
Я проверил Собственный компонент Java Интерфейсная спецификация, но или пропустил это, или это действительно является неуказанным.
Мой вопрос применяется конкретно к Sun JDK 6 на Windows XP.
Я думаю, что подтверждение, которое вы хотите получить, находится здесь: http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#wp1060
Нативный поток, подключенный к ВМ, должен вызвать DetachCurrentThread(), чтобы отсоединиться перед выходом.
И в следующей секции есть обоснование:
ВМ ждет, пока текущий поток не станет единственным пользовательским потоком, не являющимся демоном, перед тем, как он фактически выгрузится. Пользовательские потоки включают как Java-потоки, так и прикрепленные родные потоки.