1

Spring のThreadPoolTaskExecutor. このアプリケーションには、スレッドを非同期的に起動し、getState() 呼び出しを使用してスレッドの状態を監視する親ブローカー プロセスがあります。ThreadPoolTaskExecutorexecute()メソッドを使用して子スレッドをgetState()起動するようになったので、子スレッドの run() メソッドが完了した後でも、 は常に "NEW" を返します。

1 つの代替手段は、状態情報を提供する子スレッド オブジェクト内のプロパティを手動で維持することですが、使用時にスレッド状態を取得する既知の方法があるかどうか疑問に思っていましたThreadPoolTaskExecutor

4

2 に答える 2

2

Runnable を使用する代わりに Callable を使用し、代わりに execute を使用して submit を使用します。

Sample usage for Callable

    private class TaskCallable implements Callable<SomeResponse> {
        private final SomeRequest request;

        public TaskCallable (final SomeRequest request) {
            this.request = request;
        }

        public SomeResponse call() throws Exception {
            SomeResponse response = someService.getData(request);
            return response;
        }
    }

    TaskCallable callable = new TaskCallable(request);
    Future<SomeResponse> future = pooledExecutor.submit(callable);

future.isDone() を確認できます

于 2012-05-30T12:08:53.003 に答える
1

を実装するクラスを渡す必要があるときに、拡張するクラスを渡す可能性がありThreadます。その場合、クラスは開始され、常に意味のある状態として表示されます。execute()RunnableThreadNEW

execute()メソッドRunnableクラスを取ります。コードが機能する唯一の理由は、Threadrunnable も実装していることです。このThreadPoolTaskExecutorクラスは、独自のスレッドを内部で管理します。クラスThreadがスレッドとして開始されることはなく、そのrun()メソッドのみが呼び出されます。

于 2012-05-29T17:19:17.727 に答える