2012-04-25 4 views
1

jni 레이어를 호출하는 Java 코드가 있습니다.JNI 콜백 스레드

JNI 레이어는 제 3 자이므로 검사 할 수는 없지만 어떤 시점에서 새로운 스레드를 만들고 Java 코드에 대한 콜백을 작성합니다.

이 콜백 메소드 내부에서 또 다른 자바 스레드를 만들고 스레드에서 start를 호출하려고합니다. 그러나이 자바 쓰레드는 실행되지 않습니다. 그것 같이 결코 존재하지 않는다.

JNI 호출에서 스레드를 생성하면 문제가 해결됩니까?

핵심 크기의 threadpoolexecutor를 만들고 대신 executor에 넣을 수 있지만 콜백 내부에서 스레드를 만들 수없는 이유를 알고 싶습니다.

답변

3

다른 JNI 메소드를 호출하기 전에 콜백 내에 AttachCurrentThread()을 호출해야하며 종료하기 전에 DetachCurrentThread()을 호출해야합니다.

+0

이것은 합리적인 솔루션처럼 들리지만, JVM에 대한 콜백은 여전히 ​​작동하지만 콜백 내부에서 스레드 생성을 허용하지 않을 것입니다. – madlad

+0

@ user594950 JNI 사양에는 이러한 방법이 없으면 전혀 작동하지 않는다고 말하는 것은 없습니다. – EJP

+0

그게 도움이된다. 도움을 주셔서 감사합니다. – madlad