10

私は細粒度のutil.concurrencyを理解している最中です。Javaの実装はどこにありCallableFutureJVMのどこにありますか?

私は、Java langの高レベルで未来を記述するFutureクラスを見つけました。私は、それが低レベルで記述されている場所を見つけようとしています。

要約すると、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にあり、CallableほとんどがThreadクラスに含まれています。OSスレッドと連携して、別のスレッドでタスクを実行する実際のジョブを実行する、基盤となるネイティブサポートがあります。それが何をするのかを見たいのであれば、まだたくさんのJavaコードがありますが、本当の魔法であるネイティブとOSの呼び出しがあります。

これは、1.5でJavaに追加されたエグゼキュータサービスの使用方法に関する優れたチュートリアルです。

于 2013-01-30T17:31:54.533 に答える
4

Guavaライブラリには、の代わりとなるFuture:(AbstractFutureおよびのようなサブクラス)の独自の実装があります。SettableFutureFutureTask

そのようなことがどのように実装されているかを知りたい場合は、これも興味深いかもしれません。通常、Guavaコードは非常によく書かれています。

于 2013-01-30T17:26:30.830 に答える
3

Futureインターフェースです。それ自体には実装がなく、メソッドのシグネチャを指定するだけです。このインターフェースを実装するクラスのソースを確認できます。JVMにバンドルされているいくつかのパブリッククラスは次のとおりです。

grepcodeを使用して、それらの実装を確認できます。

于 2013-01-30T17:16:48.633 に答える