-4

ValidateA と ValidateB の 2 つのメソッドが定義されているクラス A があります。

class A {
   ValidateA() {
        /////
    }

   ValidateB() {
        ////
    }
}

これらの両方のステップを同時に並行して実行し、結合されたステータスを取得したいと考えています。スレッドを使用して続行するにはどうすればよいですか?

4

2 に答える 2

4

Java 5 で導入された優れたクラスを利用することを常にお勧めします。バックグラウンド タスクを管理し、クラスからコードExecutorsを隠すのに役立ちます。Thread

次のようなものが機能します。スレッドプールを作成し、Runnableそれぞれ検証メソッドの 1 つを呼び出す 2 つのクラスを送信し、それらが終了して戻るのを待ちます。それはResultあなたが構成しなければならないオブジェクトを使用します。また、検証メソッドが何を返すかによって、 Stringorとなる場合もあります。Integer

// reate an open-ended thread pool
ExecutorService threadPool = Executors.newCachedThreadPool();
// since you want results from the validate methods, we need a list of Futures
Future<Result> futures = new ArrayList<Result>();
futures.add(threadPool.submit(new Callable<Result>() {
    public Result call() {
       return a.ValidateA();
    } 
});
futures.add(threadPool.submit(new Callable<Result>() {
    public Result call() {
       return a.ValidateB();
    } 
});
// once we have submitted all jobs to the thread pool, it should be shutdown,
// the already submitted jobs will continue to run
threadPool.shutdown();

// we wait for the jobs to finish so we can get the results
for (Future future : futures) {
    // this can throw an ExecutionException if the validate methods threw
    Result result = future.get();
    // ...
}
于 2012-09-05T15:08:53.443 に答える
0

CyclicBarrierについて読む

class A {
  public Thread t1;
  public Thread t2;
  CyclicBarrier cb = new CyclicBarrier(3);
  public void validateA() {
    t1=new Thread(){
       public void run(){
         cb.await();       //will wait for 2 more things to get to barrier
          //your code
        }};
    t1.start();
  }
  public void validateB() {
    t2=new Thread(){
       public void run(){
         cb.await();      ////will wait for 1 more thing to get to barrier
          //your code
        }};
    t2.start();
  }
  public void startHere(){
        validateA();
        validateB();
        cb.wait();      //third thing to reach the barrier - barrier unlocks-thread are                 running simultaneously
  }
}
于 2012-09-05T15:14:14.783 に答える