私の設定は以下の通りです。私が達成したいのは、実装された各クラスのaMethodを並行して実行することです。私はFuture
とRunnable
を使用して調べましたが、いずれの処理を続行するかわかりません。異なるスレッドで同時にオブジェクト内のメソッドを実行する方法はありますか?
最初の考えは、boolean
の代わりにFuture<Boolean>
を返そうとしていましたが、最初に呼び出された名前に結果をどのように関連付けるのかはわかりません。
aMethodを並列/非同期で実行する理由は、aMethodがhttp要求を持つ可能性があるためです。リクエストがある場合、私は返事が続くのを待っていません。私はそれを別のスレッドで行い、次の方法に進むことを望みます。
多くのHTTPリクエストでは、aClass.doMethod()には時間がかかります。私はそれらを並行して実行したいので、続行する前に各http要求を待つ必要はありません。
誰でもこれを達成するためのヒントがありますか?
import java.util.ArrayList;
import java.util.List;
//Strategy.java
public interface Strategy {
boolean aMethod();
}
//AStrategy.java
public class AStrategy implements Strategy {
@Override
public boolean aMethod() {
// Do a couple http requests
return true;
}
}
//BStrategy.java
public class BStrategy implements Strategy {
@Override
public boolean aMethod() {
// Do some other requests
return true;
}
}
//SomeClass.java
public class SomeClass {
String name;
Strategy aStrategy;
public SomeClass(String name, Strategy strategy) {
this.name = name;
this.aStrategy = strategy;
}
public boolean doMethod() {
return aStrategy.aMethod();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//Just a regular pojo
//ResultsClass.java
public class ResultsClass {
String name;
boolean result;
public ResultsClass(String name, boolean result) {
this.name = name;
this.result = result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isResult() {
return result;
}
public void setResult(boolean result) {
this.result = result;
}
}
public class AClass {
public static void main(String args[]) {
List<SomeClass> classes = new ArrayList<>();
classes.add(new SomeClass("Class 1", new AStrategy()));
classes.add(new SomeClass("Class 2", new BStrategy()));
List<ResultsClass> results = new ArrayList<>();
classes.forEach(aClass -> results.add(new ResultsClass(aClass.getName(), aClass.doMethod())));
}
}
あなたが実際に求めていることは非常に不明です。また、あなたのソースコードは無効なjava構文の**完全**です。あなたは真剣に後退しなければなりません。例えば、コンパイルして実行する例を記述することから始めます。あなたが解決しようとする問題を示しています。そして正直なところ:構文的に正しいJavaプログラムを書く方法をまだ理解していなければ、今のところマルチスレッドを忘れてしまいます。あなたが実行しようとする前に、クロールを学ぶ。 – GhostCat
構文がないと申し訳ありません...私は自分がやっていたことを思い出して、質問を書いて何か他のものに書き換えることをマルチタスクにしようとしていました。私はそれを編集してコンパイルします.... – TheBlueMan