一、航班查询例子
客户端查询各大航空公司的航班信息,统一接收后返回处理。
二、FightQuery
package fight;
import java.util.List;
public interface FightQuery {
List<String> get();
}
三、FightQueryTask
package fight;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
public class FightQueryTask extends Thread implements FightQuery {
private final String origin;
private final String destination;
private final List<String> flightList=new ArrayList<>();
public FightQueryTask(String airline,String origin,String destination){
super("{"+airline+"}");
this.origin=origin;
this.destination=destination;
}
@Override
public void run() {
System.out.println(getName()+"-query from "+origin+" to "+destination);
int randomVal= ThreadLocalRandom.current().nextInt(10);
try {
TimeUnit.SECONDS.sleep(randomVal);
this.flightList.add(getName()+"-"+randomVal);
System.out.println("The fight:"+getName()+" list query successful");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public List<String> get() {
return this.flightList;
}
}
四、FightQueryExample
package fight;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FightQueryExample {
private static List<String> fightCompany= Arrays.asList(
"CSA","CEA","HNA"
);
public static void main(String []args){
List<String> results=search("SH","BJ");
System.out.println("=================result============");
results.forEach(System.out::println);
}
private static List<String> search(String original,String dest){
final List<String> result=new ArrayList<>();
List<FightQueryTask> tasks=fightCompany.stream()
.map(f->createSearchTask(f,original,dest))
.collect(Collectors.toList());
tasks.forEach(Thread::start);
tasks.forEach(t->{
try {
t.join();
}catch (InterruptedException e){
e.printStackTrace();
}
});
tasks.stream().map(FightQueryTask::get).forEach(result::addAll);
return result;
}
public static FightQueryTask createSearchTask(
String fight, String original,String dest){
return new FightQueryTask(fight,original,dest);
}
}
五、结果