2012-06-06 3 views
0

Можно ли использовать jmethodID intialized в одном потоке в другом потоке? Я спросил об этом, потому что мой jvm сбой, когда я запускаю jni-программу, в которой я инициализировал jmethodID на одном потоке и использовал его в другом потоке. Я думал, что это может быть причиной.Можно ли использовать jmethodID в одном потоке в другом потоке?

Я сохранил jmethodID как глобальную varibale, объявив вверху. Затем в одном из вызовов я инициализирую его и в последующих вызовах я пытаюсь его повторно использовать.

ответ

1

Цитирование из JNI Specification:

Поле или метод ID не препятствует выгрузке ВМ из класса , из которого был получен идентификатор. После выгрузки класса метод или идентификатор поля становится недействительным. Машинный код, следовательно, должны убедитесь:

keep a live reference to the underlying class, or 

recompute the method or field ID 

, если он намеревается использовать метод или поле ID в течение длительного периода времени .

+0

так что кешированная копия будет работать? –

+0

@SuhailGupta Это будет «намереваться [использовать] метод или идентификатор поля в течение длительного периода времени». Неужели это очевидно? – EJP

+0

Я хотел сказать _between calls_. –

Смежные вопросы