ValidateA と ValidateB の 2 つのメソッドが定義されているクラス A があります。
class A {
ValidateA() {
/////
}
ValidateB() {
////
}
}
これらの両方のステップを同時に並行して実行し、結合されたステータスを取得したいと考えています。スレッドを使用して続行するにはどうすればよいですか?
ValidateA と ValidateB の 2 つのメソッドが定義されているクラス A があります。
class A {
ValidateA() {
/////
}
ValidateB() {
////
}
}
これらの両方のステップを同時に並行して実行し、結合されたステータスを取得したいと考えています。スレッドを使用して続行するにはどうすればよいですか?
Java 5 で導入された優れたクラスを利用することを常にお勧めします。バックグラウンド タスクを管理し、クラスからコードExecutors
を隠すのに役立ちます。Thread
次のようなものが機能します。スレッドプールを作成し、Runnable
それぞれ検証メソッドの 1 つを呼び出す 2 つのクラスを送信し、それらが終了して戻るのを待ちます。それはResult
あなたが構成しなければならないオブジェクトを使用します。また、検証メソッドが何を返すかによって、 String
orとなる場合もあります。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();
// ...
}
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
}
}