2012-02-28 17 views
2

Javaで非同期メソッド呼び出しを実装する方法はありますか?スレッドとExecutor以外の方法はありますか? Executorによって実装されている場合、遅延が導入されますか?Javaで非同期メソッド呼び出しを実装する方法は?

+0

追加するすべてのものが遅延を招きます。 –

答えて

1

を使用すると、Threadsは、Javaのやり方ではです。 Executorsは、より良いコンテナにスレッド管理をラップする単なる方法です。

が遅延を導入します。スレッドが別のタスクを処理するのに忙しい場合、遅延が発生します。さもなければ、遅れは、一般に非常に応答性の高いOSコンテキスト切り替えメカニズム(マルチコアアーキテクチャおよびハイパースレッディングまたは同様の技術に基づくアーキテクチャによって変化する可能性がある)に基づいている。

+0

実行者に導入された遅延は、スレッドプールとワーカースレッドの可用性によって異なります。 – neo

+0

@neo、絶対に –

0

DynamicProxy(コアJava機能)を使用して、呼び出し元と呼び出し先の間にレイヤを導入できます。プロキシでは、オブジェクトとして表されるメソッド呼び出しがあります。直ちに戻り、メソッドを別のスレッドで呼び出します。質問は、呼び出し元に値を返す方法が残っています。後で返す戻り値を持つ予定ですか?これは、コールバックメソッドを使用して解決できます。

+0

いいえ、何も返さないでください。 – neo

-1

コールバックを実装するクラスを渡すことができます。

new A(instanceOfB); 

someMethodOfA() { 
    doSomething(); 
    instanceOfB.callback(); 
} 
1

メッセージング(JMS)を使用してそのような動作を実装することもできます。
また、Java EE6セッションBeanでは、@ Asynchronousを使用してメソッド呼び出しをAsyncに呼び出すことができます。

関連する問題