我已经创建了一个启动线程的java库。
使用普通的java-main方法测试此库并调用库时,相关的线程就可以正常启动。
但是现在我想通过JNI从C dll调用这个库。
1)因此,C dll通过JNI
调用库方法foo
2)foo
创建一个java线程并在其上调用start
3)foo
返回C dll调用者。
4)Java线程现在开始
问题是我从帖子中获得了Future
,我在其上调用了get
。
当从C dll调用java代码时,此get
会永久阻塞,但在从另一个Java应用程序调用时工作正常。
所有其他代码对JNI也运行良好。
任何想法如何发生这种情况?
dll或JNI是否以某种方式阻止了java线程的创建?
答案 0 :(得分:0)
如果有人遇到类似的问题:
问题是我创建了对dll的本机回调。
从创建的线程调用此回调,不允许对本机代码进行多线程处理。
删除从线程到本机代码的所有调用解决了问题。