-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