-1
我的設置如上所述。我想要完成的是在每個實現的類中並行運行aMethod。我研究過使用Future
s和Runnable
,我不確定如何進行這兩個過程。如何同時在不同線程的對象中運行一個方法?
我的第一個想法是嘗試返回Future<Boolean>
而不是常規的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