我正在理解细粒度util.concurrency。位于JVM中的Java Callable
和Future
的实现在哪里?
我找到了Future class,它描述了Java lang中高层的未来,我试图找到它在较低层次上所描述的位置。
总结一下,找到Future和Callable的实际实现会很有意思,例如:处理Future.get()或Callable.call()的JVM部分,并规定它们应该如何工作。
期待您的回复, Akonkagva
答案 0 :(得分:10)
JVM中Java Callable和Future的实现在哪里?
Future
界面的主要实现是FutureTask
class。 ExecutorService
类使用它来表示提交的作业等。Callable
(如Runnable
)是一个您自己实现的简单界面。它包装了您希望ExecutorService
线程池执行的任务。您应该下载这些类的源jar并亲自查看Java代码。
这些类都不包含任何JVM黑魔法或任何东西。例如,如果构造一个Callable
类,除非将其提交给线程池,否则它不会在另一个线程中运行。您可以在与线程无关的许多不同位置使用Callable
。
Future
和Callable
周围的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查看其实现。