10

我正在了解细粒度的 util.concurrency。Java 的实现在哪里CallableFuture位于 JVM 中?

我找到了Future 类,它在 Java 语言中描述了高级别的未来,我试图找到它在较低级别上描述的地方。

总而言之,找到 Future 和 Callable 的实际实现会很有趣,例如:处理 Future.get() 或 Callable.call() 并规定它们应该如何工作的 JVM 部分。

期待您的回复,Akonkagva

4

3 回答 3

12

Java Callable 和 Future 的实现在 JVM 中的什么位置?

Future接口的主要实现是FutureTask。类使用它ExecutorService来表示提交的作业等。 Callable(如Runnable)是您自己实现的简单接口。它包装了您希望ExecutorService线程池执行的任务。您应该下载这些类的源 jar 并自己查看 Java 代码。

这些类都不包含任何 JVM 黑魔法或任何东西。例如,如果您构建一个Callable类,除非您将其提交到线程池,否则它不会在另一个线程中运行。您可以Callable在许多与线程无关的地方使用 。

JVM“黑魔法”主要包含在Future类中。它具有底层本机支持,可与操作系统线程一起完成在另一个线程中运行任务的实际工作。如果您想看看它的作用,其中仍然有很多 Java 代码,但是有本机和操作系统调用才是真正的魔力。CallableThread

这是一个很好的教程,介绍如何使用1.5 中添加到 Java 的执行器服务。

于 2013-01-30T17:31:54.533 回答
4

Guava库有自己的: FutureAbstractFuture和子类,如SettableFuture)实现,它是FutureTask.

如果您有兴趣了解如何实现这些东西,这可能也很有趣。通常番石榴代码写得很好。

于 2013-01-30T17:26:30.830 回答
3

Future是一个接口。它本身没有实现,它只是指定方法签名。您可以检查实现此接口的任何类的源代码。与 JVM 捆绑的一些公共类是:

您可以使用 grepcode 查看它们的实现。

于 2013-01-30T17:16:48.633 回答