Callable和Future的实际实现

时间:2013-01-30 17:12:55

标签: java concurrency theory future callable

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

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

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

期待您的回复, Akonkagva

3 个答案:

答案 0 :(得分:10)

  

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

Future界面的主要实现是FutureTask classExecutorService类使用它来表示提交的作业等。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

答案 1 :(得分:4)

Guava库有自己的Future实现:AbstractFuture(以及SettableFuture之类的子类),它是FutureTask的替代。

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

答案 2 :(得分:3)

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

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