java - 为什么 Thread 的 isAlive() 方法被声明为 native?

标签 java multithreading

为什么 isAlive() 方法在 Thread.java 中被声明为 native?哪个类实现了这个?我知道 native 方法是在 Java 之外实现的。实现它的类是通过加载相应的库来加载的。但是我很想知道哪个类实现了isAlive() 方法?为什么它被宣布为原生?

最佳答案

Why isAlive() method has been declared native in Thread.java?

可能是因为它必须在 native 代码中实现。可能是因为它可以在 native 代码中更简单地实现。可能是出于历史原因;即它在很久以前被声明为native,并且它一直保持这种状态以通过“修复”它来最大程度地减少潜在的破坏。

您可能会通过查看所有平台上 Thread 的 native 代码方法的 C++ 源代码获得更多见解。但很明显,历史实现的源代码是不可用的。

Which class implements this?

没有。它是原生的

I know native methods are implemented outside Java. The class which implement this is loaded by loading the respective library.

显然它不是 Java 类......

但实际上,该库可能链接到核心 java 可执行文件中,而不是动态加载。

But I am curious to know which class implements isAlive() method?

嗯……你说的是 C++ 类吗?它将取决于平台。许多 native 类在 Windows、Linux 和 Solaris(我猜现在可能还有 Mac)的代码库中有不同的版本。

如果您真的很好奇,我建议您从 OpenJDK Mercurial 存储库中查看代码,或者下载源包并进行搜索。不幸的是,OpenJDK 项目没有为存储库提供一个非常方便的基于 Web 的源代码浏览器。 (所以即使我为你找到了它,我也无法给你一个稳定的链接。)

And why it is declared native?

你在重复自己。 (但 Java 类未声明为 native。Java 方法是...)

关于java - 为什么 Thread 的 isAlive() 方法被声明为 native?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28318212/

相关文章:

java - 如何更改 NetBeans 8 中的默认 JDK

java - 在另一个切面上下文中调用切面 - Spring AOP

c# - 使用 WPF 在线程中加载图像

java - Kotlin 有多平台锁吗?

java - 如何让我的 JFrame 位于屏幕顶部?

java - Java 12 中缺少集成测试阶段

java - JNI 找不到 native 方法 (test\Test.java :11: cannot find symbol)

java - Joptionpane弹出窗口

java - 如何覆盖 java 中的 thread.start() 方法?

C# 在线程完成当前函数循环后使用按钮停止线程