IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> join 方法用于航班查询 -> 正文阅读

[大数据]join 方法用于航班查询

一 问题描述

通过多线程查询多家航班信息,并合并输出。

二 问题分析

该例子是典型的串行任务局部并行化处理,将每一家航空公司的查询都交给一个线程去工作,然后在它们结束工作之后统一对数据进行整理,这样就可以极大节约时间,从而提高用户体验。

三 代码

1 FightQuery

package fightquery;

import java.util.List;

public interface FightQuery {
    List<String> get();
}

2?FightQueryTask

package fightquery;

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 List<String> get() {
        return this.flightList;
    }

    @Override
    public void run() {
        System.out.printf("%s-query from %s to %s \n", getName(), origin, destination);
        int randomval = ThreadLocalRandom.current().nextInt(10);
        try {
            TimeUnit.SECONDS.sleep(randomval);
            this.flightList.add(getName() + "-航班1-" + randomval);
            this.flightList.add(getName() + "-航班2-" + randomval);
            System.out.printf("The Fight:%s list query successful \n", getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3?FightQueryTest

package fightquery;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static java.util.stream.Collectors.toList;

public class FightQueryTest {
    // 各大航空公司
    private static List<String> fightCompany = Arrays.asList("南方航空", "东方方航空", "海南航空");

    public static void main(String[] args) {
        List<String> restlts = search("上海", "南京");
        System.out.println("=============结果===================");
        restlts.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(toList());
        // 分别启动这几个线程
        tasks.forEach(Thread::start);
        // 分别调用每一个线程的 join 方法,阻塞当前线程
        tasks.forEach(t -> {
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        // 获取每一个线程的查询结果,并且加入到 result
        for (FightQueryTask task : tasks) {
            List<String> stringList = task.get();
            result.addAll(stringList);
        }
        return result;
    }

    private static FightQueryTask createSearchTask(String fight, String original, String dest) {
        return new FightQueryTask(fight, original, dest);
    }
}

四?测试结果

[南方航空]-query from 上海 to 南京
[东方方航空]-query from 上海 to 南京
[海南航空]-query from 上海 to 南京
The Fight:[南方航空] list query successful
The Fight:[海南航空] list query successful
The Fight:[东方方航空] list query successful
=============结果===================
[南方航空]-航班1-3
[南方航空]-航班2-3
[东方方航空]-航班1-9
[东方方航空]-航班2-9
[海南航空]-航班1-6
[海南航空]-航班2-6

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:37:32  更:2022-02-26 11:37:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:25:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码