2011-11-16 21 views
2

私の(Spring MVCベースの)コントローラから非同期呼び出しをしようとしています。Spring MVCコントローラからの非同期呼び出し

私は次のコードを使用しています:

FutureTask<Object> runnableTask = new FutureTask<Object>( 
       new Runnable() { 
        public void run() { 
         // do something 
        } 

       }, null); 
runnableTask.run(); 

しかし、どんな、これは非同期で実行されていないされていない上記のタスクが完了するまで、すなわち、私のコントローラは、(ビューへの)応答を返す返しません。私は何かを逃しているのですか、そうする別の方法がありますか?

答えて

4

あなたはそれを行うには、エグゼキュータ必要があります。

Executor executor = Executors.newXx(..); //any executor, likely single-threaded 
executor.submit(yourRunnable); 
executor.shutdown(); 

をしかし、春がすでに(docs)ことがある - 応答

+0

をちょうど方法を作り、@Asyncでそれに注釈を付ける(とxmlで<task:annotation-driven />を持っています) @Asyncメソッド内の操作が完了するまで、引き続き保持されます。アノテーションを追加しただけでなく、 ' ' – Saket

+0

メソッドは公開され、別のサービスから呼び出されるべきです。 – Bozho

+0

このメソッドは別のサービスですが、まだ...私はスレッドIDをダンプしようとしましたが、同じスレッド(異なるスレッドではなく)で実行されているように見えます。ここに欠けているものが何であるかわからない – Saket

関連する問題