从C(JNI)DLL调用Java应用程序时不启动线程

时间:2014-12-17 12:46:50

标签: java multithreading dll java-native-interface

我已经创建了一个启动线程的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线程的创建?

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似的问题:

问题是我创建了对dll的本机回调。

从创建的线程调用此回调,不允许对本机代码进行多线程处理。

删除从线程到本机代码的所有调用解决了问题。