1

私はジョブ キュー ライブラリを使用しています。ここでは、 を定義JobしてJobManager. にJobManagerは、をキューから取り出して を呼び出すThreadGroupwith ワーカーがあります。JobJob.onRun()

スレッドの量は、スレッドの最大量と最小量、負荷係数 (ワーカー スレッドが新しいジョブを作成する前に保持できる未処理のジョブの数)、最小値を超えるスレッドのアイドル タイムアウトを指定することによって設定されます。run()したがって、新しいジョブがなく、アイドル タイムアウトに達すると、ワーカー スレッドは終了します。

一部Jobの s では、非同期 API のみを公開するライブラリを使用しています。これらを onRun() で使用しても安全ですか?

たとえば、応答を提供するコールバックを受け取るネットワーク リクエストを作成したい場合、コールバックは次のように呼び出されます。

@Override
public void onRun() throws Throwable {
    client.doRequest(request, new Callback() {
        @Override
        public void onRequestComplete(Response response) {
            //is this guaranteed to get called?
        }
    });
    //since we now return from onRun() will onRequestComplete() get called?
}
4

3 に答える 3

1

はいといいえ

YES:オブジェクトに an のインスタンスを提供しCallbackますclientonRequestCompleteクライアントは、(サーバーから)レスポンスを取得した後、メソッドを呼び出すだけです。

いいえ:実行中のスレッドがなく、未処理のリクエストがある場合、アプリケーションが停止するため、リクエストがキャンセルされる場合があります。

しかし、JVMのシャットダウンではなく、通常の実行について質問していたと思います。

だから私の推測はYESですが、クライアントの実装はわかりません(内部に何らかのイベントメカニズムを持つスレッドを開始すると思います)。

于 2014-05-09T22:12:27.183 に答える