1

私のアプリケーションでは、テーブルに挿入されるジョブと実行の詳細のような一連の SQL クエリを実行しています。レコードが挿入されるとすぐに、リスナーはそれを取得して実行ステータスの監視を開始し、同じテーブルのステータスを更新する必要があります。

私のフロントエンドは準備ができており、今までジョブ(複数のクエリ)を実行し、詳細をテーブルに挿入することができました. ここで、実行のステータスをキャプチャしたいと思います。また、実行を終了、一時停止、再開できる必要があります。

マルチスレッドの部分を進めているときに、ExecutorService に出会いました。

私の質問は、ExecutorService を使用してこれを行うべきですか? または他の方法はありますか?

チュートリアルのリンクを共有してください。

4

4 に答える 4

1

あなたの場合、ExecutorServiceを使用して、実行中のジョブのステータスをFutureオブジェクトの形式で取得するのに役立つCallableオブジェクトでジョブを作成できると思います。

チュートリアルの場合、私はこれを好みます。並行パッケージに関する基本的な情報があります。

于 2012-06-07T07:07:12.850 に答える
0

おそらく、ここでの私の質問への回答は、タスクのステータスをキャプチャするのに少し役立つ可能性があります。

how-to-get-to-futuretask-execution-state

Executorsフレームワークは非常に強力で、ほとんどすべての場合に使用できますが、Quartzのような同時実行ライブラリを確認する必要があります。これには、Executorsを使用する場合に発生する多くの問題がすでに解決されています。

于 2012-07-05T07:04:21.660 に答える
0

ExecutorService を使用して並列単体テストを実行しました。そして、それは非常に成功したことがわかりました。ですので、ぜひご利用をおすすめします。これを参照してください

于 2012-06-07T07:09:40.773 に答える
0

はい。あなたはExecuteService、これCallableFuture達成することができます。

サンプルコード:

import java.util.concurrent.*;
import java.util.*;
import java.util.Random;

public class CallableDemo{
    public CallableDemo(){
        System.out.println("creating service");
        ExecutorService service = Executors.newFixedThreadPool(10);

        System.out.println("Start");
        List<MyCallable> futureList = new ArrayList<MyCallable>();
        for ( int i=0; i<10; i++){
            MyCallable myCallable = new MyCallable();
            Future future = service.submit(myCallable);
            try{
                System.out.println("future.isDone = " + future.isDone());
                /* You can use future.get() blocking call set time out*/
                System.out.println("future: call ="+future.get());
            }
            catch (CancellationException ce) {
                ce.printStackTrace();
            } catch (ExecutionException ee) {
                ee.printStackTrace();
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt(); // ignore/reset
            }
        }       
        service.shutdown();
    }
    public static void main(String args[]){
        CallableDemo demo = new CallableDemo();
    }
    class MyCallable implements Callable<Long>{
        Long result = 0L;

        public MyCallable(){

        }
        public Long call(){
            // Add your business logic
            // set the result
            return result;
        }
    }
}

重要な注意事項:

  1. future.get() は Callable タスクの計算後に戻ります。Callable が完了するまでブロックするか、タイムアウトを設定できます。
  2. を取得した場合はInterruptedException、現在のスレッドを中断して続行します。
  3. 電話することを忘れないでくださいshutdown()
于 2015-11-13T09:22:00.173 に答える