首页 > 其他分享 >线程池使用场景 调用多个微服务汇总数据

线程池使用场景 调用多个微服务汇总数据

时间:2024-08-15 16:50:23浏览次数:9  
标签:调用 汇总 System 线程 println new public out

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;
import java.util.concurrent.*;

public class T {

    @SneakyThrows
    public static void main(String[] args) {
        shopping_threadPool();
    }

    /* 汇总数据使用线程池+Future 耗时≈所有微服务中用时最长的时间

    购物开始:2024-08-15 04:41:13 385
    调用商品微服务
    调用订单微服务
    调用物流微服务
    购物结束:2024-08-15 04:41:18 397
    * */
    @SneakyThrows
    public static void shopping_threadPool() {
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 5, 0,
                TimeUnit.SECONDS, new LinkedBlockingDeque<>(1));

        System.out.println("购物开始:" +
                new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS")
                        .format(System.currentTimeMillis()));

        Callable<String> product = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return product();
            }
        };

        Callable<String> order = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return order();
            }
        };

        Callable<String> logistics = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return logistics();
            }
        };

        Future<String> productService = threadPool.submit(product);
        Future<String> orderService = threadPool.submit(order);
        Future<String> logisticsService = threadPool.submit(logistics);
        System.out.println(productService.get());
        System.out.println(orderService.get());
        System.out.println(logisticsService.get());

        System.out.println("购物结束:" +
                new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS")
                        .format(System.currentTimeMillis()));
    }

    /*
    购物开始:2024-08-15 04:40:25 240
    调用商品微服务
    调用订单微服务
    调用物流微服务
    购物结束:2024-08-15 04:40:33 263
    * */
    public static void shopping_ordinary() {
        System.out.println("购物开始:" +
                new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS")
                        .format(System.currentTimeMillis()));
        System.out.println(product());
        System.out.println(order());
        System.out.println(logistics());
        System.out.println("购物结束:" +
                new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS")
                        .format(System.currentTimeMillis()));
    }

    @SneakyThrows
    public static String logistics() {
        Thread.sleep(5000);
        return "调用物流微服务";
    }

    @SneakyThrows
    public static String order() {
        Thread.sleep(2000);
        return "调用订单微服务";
    }

    @SneakyThrows
    public static String product() {
        Thread.sleep(1000);
        return "调用商品微服务";
    }

}

标签:调用,汇总,System,线程,println,new,public,out
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18361304

相关文章

  • 易优Tag调用-Eyoucms标签手册
    【基础用法】名称:tag功能:TAG调用语法:{eyou:tagsort='now'getall='0'row='100'}<ahref='{$field.link}'>{$field.tag}</a>{/eyou:tag}参数:aid=''文档ID,在内容页可以不设置该属性typeid=''栏目ID,调取某个栏目下的全部TAG......
  • 易优Ad单条广告调用-Eyoucms标签手册
    [基础用法]名称:ad功能:获取单条广告数据语法:{eyou:adaid='广告ID'}<ahref='{$field.links}'{$field.target}><imgalt='{$field.title}'src='{$field.litpic}'/></a>{/eyou:ad}参数:aid=''指定广告IDid='&......
  • 线程池 种类
    fixedsinglecachedimportjava.util.concurrent.*;publicclassT{publicstaticvoidmain(String[]args){ExecutorServicethreadPool=getFixedThreadPool();for(inti=0;i<8;i++){threadPool.submit(newMyTask......
  • 点击识别按钮调用后端接口,中途按下结束识别,但是识别还是进行啦js
    在JavaScript中,如果你想要在点击按钮后调用一个接口,并且在这个过程中按下一个按钮来中断或取消这个请求,你可以使用fetchAPI来发起请求,并使用AbortController来取消这个请求。以下是一个简单的例子://获取按钮元素conststartButton=document.getElementById('startButton');......
  • CTF常见密码汇总
    栅栏密码fg2ivyo}l{2s3_o@aw__rcl@-->flag{w22_is_v3ry_cool}https://tool.bugku.com/jiemi/所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一......
  • 身份证OCR识别接口如何用Java调用
    一、什么是身份证OCR识别接口?身份证OCR识别接口又叫身份证识别,身份证图像识别,身份证文字识别,即自动识别和提取身份证上的文字和数字信息。它可以通过图像处理和模式识别算法,将身份证中的姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等关键信息准确地提取......
  • git一些问题汇总
    普通文件夹成为git项目并和网上关联1、先在网上建立一个仓库,获得地址2、gitinit3、gitadd.4、gitcommit-m'firstcommit'5、gitremoteaddorigin复制的远程代码仓库地址6、gitpull--rebaseoriginmaster获取远程库与本地同步合并(如果远程库不为空必须做这一步,......
  • Python代码调用扣子平台大模型,结合wxauto优秀开源项目实现微信自动回复好友消息
    最近看到微信自动化回复,觉得很有意思,想接通大模型,自动回复好友消息。以下文章将对代码进行详细解释,文章末尾附源码1.在抖音扣子平台创建发布一个大模型智能问答助手,获取API-key等。在扣子平台有详细文档。2.wxauto安装。pipinstallwxauto项目地址是​​​​​​cluic/wxau......
  • 【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
    ArrayList(JDK8)ArrayList有四个内部类,成员内部类Itr,成员内部类ListItr,静态内部类SubList,ArrayListSpliterator(暂时用不到)Itr是Iterator的实现类,支持正向遍历,ArrayList的iterator方法返回一个Itr对象ListItr是ListIterator的实现类,支持双向遍历,ArrayList的listIterator方法......
  • 线程池创建的几种方式
    线程池的创建⽅法总共有7种,但总体来说可分为2类:通过ThreadPoolExecutor创建的线程池;通过Executors创建的线程池前置步骤publicclassThreadTaskimplementsRunnable{Loggerlogger=LoggerFactory.getLogger(ThreadDemo.class);privateStringtaskN......