Callable和Future的实际实现

问题描述 投票:8回答:3

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

我找到了Future class,它描述了Java lang中的高级未来,我试图找到它在较低级别描述的位置。

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

期待您的回复,Akonkagva

java concurrency theory future callable
3个回答
10
投票

位于JVM中的Java Callable和Future的实现在哪里?

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

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

FutureCallable周围的JVM“黑魔法”主要包含在Thread类中。它具有底层本机支持,可与OS线程一起完成在另一个线程中运行任务的实际工作。如果你想看看它的作用,那里仍然有很多Java代码,但是本机和操作系统调用真的很神奇。

这是在1.5中添加到Java的good tutorial about how to use the executor services


4
投票

Guava库有自己的Future实现:AbstractFuture(和SettableFuture这样的子类),它是FutureTask的替代品。

如果您有兴趣了解这些内容是如何实现的,那么查看这些内容可能也很有趣。通常Guava代码写得很好。


3
投票

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

您可以使用grepcode查看其实现。

© www.soinside.com 2019 - 2024. All rights reserved.