首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中Thread的自定义实现:可以通过JNI实现吗?

Java中Thread的自定义实现:可以通过JNI实现吗?
EN

Stack Overflow用户
提问于 2010-08-13 23:04:51
回答 2查看 810关注 0票数 3

是否有可能以安全/正确的方式在Java中实现自定义Thread类(使用JNI)?

假设我用本机start()方法编写了自己的NewThread类,该方法派生执行,在派生的线程中调用run()并返回...

这有可能吗?JVM会抱怨吗?根据规范,它是“合法的”吗?这会破坏内存模型中的任何东西吗?它依赖于特定的JVM吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-13 23:36:55

您的问题将在Java Native Interface Programmer's Guide and Specification, section 8.1.5中得到解答。

重要的问题是,VM必须使用与本机代码中相同的线程模型。一些最早的Java在一些操作系统(Linux)上使用所谓的“绿色线程”来模拟线程上下文切换,因为操作系统本身并不提供本机线程支持。如果您要在具有本机线程支持的较新操作系统版本上使用这些旧VM之一,则这些“绿色线程”将无法与本机线程交互。

从Sun的JRE 1.3开始,我认为所有“普通”VM都直接使用本机线程,这意味着您可以在JNI代码中使用本机线程,并期望一切都能按您期望的那样工作。

票数 1
EN

Stack Overflow用户

发布于 2010-08-13 23:35:42

这是可能的。在过去,我使用的是一个为套接字读取消息的C++库。在通过JNI进行初始化之后,该库启动了两个pthread,它们从套接字读取数据,并通过JNI在Java领域进行调用。上面提到的pthread深入到了Java代码中。我们唯一的问题是JNI seam的内存问题。在阅读了JNI文档并进行了一些调试之后,问题就解决了。所以,内存模型没有问题。

不知道JVM是否会基于从JNI传入的执行触发JIT,因此可能会影响性能。

可行,在某些地方很棘手。如果您可以使用Java Thread,请避免这种情况。我知道我会的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3478150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档