ListenableFuture和countdownlatch使用example
ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)完成后立即执行
import com.google.common.util.concurrent.*;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;/*** 如果需要所有的listenableFuture返回结果,可以使用countdownlatch,在Futures.addCallback的success里面把countdownlatch减1* 等countdownlatch=0的时候,所有的listenableFuture都计算完成*/
public class ListenableFutureLearn2 {public void test3() throws Exception {ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());// 执行任务final ListenableFuture<String> listenableFuture = executorService.submit(new Callable<String>() {public String call() throws Exception {for (int i = 0; i < 10000; i++) {System.out.println(i);}return "success";}});final ListenableFuture<String> listenableFuture2 = executorService.submit(new Callable<String>() {public String call() throws Exception {for (int i = 0; i < 10000; i++) {System.out.println(-i);}return "success";}});// 绑定任务以及回调函数Futures.addCallback(listenableFuture, new FutureCallback<String>() {@Overridepublic void onSuccess(String result) {String str = "";try {str = listenableFuture.get();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}System.out.println("integer:" + str);System.out.println("result:" + result);}@Overridepublic void onFailure(Throwable t) {System.out.println("error" + t.getMessage());}}, MoreExecutors.directExecutor());Futures.addCallback(listenableFuture2, new FutureCallback<String>() {@Overridepublic void onSuccess(String result) {String str = "";try {str = listenableFuture.get();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}System.out.println("integer:" + str);System.out.println("result:" + result);}@Overridepublic void onFailure(Throwable t) {System.out.println("error" + t.getMessage());}}, MoreExecutors.directExecutor());TimeUnit.MILLISECONDS.sleep(500);System.out.println("listenableFuture:" + listenableFuture.get());}public static void main(String[] args) throws Exception {new ListenableFutureLearn2().test3();}
}
相关文章:
ListenableFuture和countdownlatch使用example
ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)完成后立即执行 import com.google.common.util.concurrent.*;import java.util.concurrent.Call…...
C- strtok() strtok_r()
strtok() strtok 是 C 语言库中的一个函数,用于在字符串上执行分词操作。这意味着它可以用于将字符串分解成多个标记或段,这些标记之间由指定的分隔符分隔。 以下是 strtok 函数的原型: char *strtok(char *str, const char *delim);参数&…...
order by数据过多引起的cpu飙升
测试环境 1.目前数据库类型为pg数据库2.目前数据库业务为共享数据库,为减少其他业务对本次测试的影响,故选在业务空闲时间执行3.服务器性能为8C 32GB 500GB硬盘 原程序测试结果 优化后程序结果 出现原因 当数据量大时,order by排序操作会消耗大量的CPU资源&#…...
namespace命名空间
namespace命名空间 什么是命名空间? namespace命名空间 同一个名称在不同的命名空间中所指向的对象是不同的 为什么要使用命名空间? 防止标识符的命名发生冲突 你写的代码中定义了个fun()函数 所使用的类库中也包含了一个fun()函数 当你的代码中调用fun()函数时 程序:?…...
golang中如何配置 sql.DB 以获得更好的性能
有很多很好的教程讨论 Go 的sql.DB类型以及如何使用它来执行 SQL 数据库查询和语句。但它们中的大多数都掩盖了SetMaxOpenConns()、SetMaxIdleConns()和SetConnMaxLifetime()方法——您可以使用它们来配置 的行为sql.DB并改变其性能。 在这篇文章中,我想准确解释这…...
JAVA同城服务智慧养老小程序怎么开发?
随着人口老龄化的加剧,智慧养老成为了社会关注的焦点。智慧养老小程序作为一种便捷、高效的服务工具,为老年人提供了更全面、个性化的服务。本文将介绍如何使用JAVA编程语言开发一款同城服务智慧养老小程序。 一、设计思路 界面设计:小程序…...
Linux防火墙:Firewalld 常用命令
Linux防火墙:Firewalld 常用命令 CentOS 和 Fedora 中默认的防火墙是 Firewalld 查看防火墙状态 firewall-cmd --state 启动防火墙 systemctl start firewalld 重启防火墙 systemctl restart firewalld 暂时关闭防火墙 systemctl stop firewalld 永久关闭防火墙…...
Java BigInteger比Long更大的整数自增转字符串存储
文章目录 前言BigInteger自增BigInteger转化为StringBigInteger阶乘 前言 BigInteger类在Java中可以表示任意大小的整数,没有固定的范围限制。它使用内部的数组来存储整数的位数,并提供了各种方法来执行算术运算和其他操作。 BigInteger类的大小只受限…...
BigDecimal应用——计算费用场景中用到Integer,Double,BigDecimal三种类型出现的意外情况 结合BigDecimal源码分析
引出 在一个计算费用的场景中,用到了Integer,Double,BigDecimal三种类型,在转换为bigdecimal的时候遇到的问题,结合源码进行了分析。 1.在new bigdecimal的时候,最好传入的是字符串;2.double类…...
数据抓取可以应用到哪些行业
随着互联网的发展,数据已经成为人们生活中不可或缺的一部分。数据抓取作为获取数据的重要手段之一,也被广泛应用于各个行业。本文将探讨数据抓取在各个行业中的应用。 首先,让我们来了解一下数据抓取的基本概念。数据抓取是指通过一定的技术…...
目标检测YOLO实战应用案例100讲-面向小目标检测的多尺度特征融合(续)
目录 3.3 实验结果及分析 3.3.1 实验设置 3.3.2 消融实验 3.3.3 在PASCAL VOC2007上的结果...
如何选择适合的美颜SDK?
美摄美颜SDK是一款专门为企业提供美颜技术支持的SDK,可以帮助企业开发出具有高品质美颜效果的移动应用。本文将介绍美摄美颜SDK的技术特点和面向企业提供的技术支持。 一、技术特点 美摄美颜SDK采用了先进的图像处理技术和人工智能算法,能够快速准确地…...
Spring-底层架构核心概念
Spring底层核心组件 BeanDefinition BeanDefinition表示Bean定义,有很多属性用来描述Bean的特点: class,表示Bean类型 scope,表示Bean作用域,单例或原型等 lazyInit:表示Bean是否是懒加载 initMethod…...
RabbitMQ初入门
1、RabbitMQ是什么 RabbitMQ是“实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…...
电脑定时关机
电脑定时关机 1.右键 管理 2. 3. 4. 5. shutdown.exe/s /f /t 06.点击完成就好了 7.这里面可以 看到定时任务和启动 右键有运行 结束 禁用...
【算法】滑动窗口题单——4.不定长滑动窗口(求子数组个数)
文章目录 前言2799. 统计完全子数组的数目解法1——枚举右端点,移动左端点解法2——枚举左端点,扩展右端点 713. 乘积小于 K 的子数组1358. 包含所有三种字符的子字符串数目2302. 统计得分小于 K 的子数组数目2537. 统计好子数组的数目2762. 不间断子数组…...
CMake aux_source_directory 学习
如下,prj是空文件夹; add.h; #include <iostream>using namespace std;int add1(int a, int b); num.h; int num1100; int num2301; add.cpp; #include "add.h"int add1(int i, int j) {return i j; } main.cpp&#x…...
Mybatis中延迟加载~
延迟加载: 等一会加载,在多表关联查询操作的时候可以使用到的一种方案,如果是单表操作就完全没有延迟加载的概念。 多表查询例如,查询用户和部门信息,如果我们仅仅只是需要用户的信息,而不需要用户对应的…...
【C语言】memmove()函数(拷贝重叠内存块函数详解)
🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.memmove()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.onst void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数…...
04-流媒体-ffmpeg.c源码分析
ffmpeg.c是一个使用ffmpeg库的参考代码,实现了视频格式转换的功能,类似于我们常用的格式工产,源代码的的目录是: ffmpeg-4.2.2/fftools/ffmpeg.c 和前面的ffplay一样,我们分析其源代码,主要只是为了让读者了解ffmpeg.c此文件的大概流程,并且熟悉常用的ffmpeg库的API。 下…...
Downr1n iOS降级与越狱实战指南:从问题诊断到解决方案
Downr1n iOS降级与越狱实战指南:从问题诊断到解决方案 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 一、决策指南:为什么选择Downr1n? 1.1 核心…...
避坑指南:STM32磁编码器校准常见的5个错误及解决方案
STM32磁编码器校准实战:5个典型错误分析与高阶解决方案 磁编码器在步进电机控制系统中扮演着关键角色,而MT6816作为国产AMR技术代表芯片,其14位高精度输出为位置检测提供了可靠保障。但在实际校准过程中,开发者常会遇到CALI_Error…...
Maestro内核架构深度解析:从启动到多任务调制的完整流程
Maestro内核架构深度解析:从启动到多任务调制的完整流程 【免费下载链接】maestro Unix-like kernel written in Rust 项目地址: https://gitcode.com/gh_mirrors/maestro5/maestro Maestro是一个用Rust编写的类Unix内核,它通过现代内存管理、高效…...
旧Mac焕新指南:使用OpenCore Legacy Patcher打造启动盘
旧Mac焕新指南:使用OpenCore Legacy Patcher打造启动盘 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac设备因硬件限制无法升级到最新macOS系统时&am…...
告别原生组件坑!微信小程序里让Canvas乖乖跟着ScrollView滚动的3种实战方案
微信小程序Canvas与ScrollView滚动冲突的深度解决方案 在开发微信小程序时,遇到Canvas等原生组件不跟随ScrollView滚动的问题,确实让不少开发者头疼。这种层级限制源于微信小程序的底层设计,原生组件如Canvas、Video等被渲染在WebView之上&am…...
ChatGLM-6B角色扮演功能开发:基于Prompt的智能对话系统
ChatGLM-6B角色扮演功能开发:基于Prompt的智能对话系统 1. 引言 想象一下,你正在开发一个智能客服系统,需要让AI能够扮演不同角色的专业人士来回答用户问题。或者你正在创建一个教育应用,希望AI能够化身历史人物、科学导师或文学…...
Phi-3-mini-4k-instruct快速体验:Ollama部署教程与入门Prompt分享
Phi-3-mini-4k-instruct快速体验:Ollama部署教程与入门Prompt分享 1. 模型简介 Phi-3-Mini-4K-Instruct是微软推出的轻量级开源语言模型,具有以下核心特点: 轻量高效:仅38亿参数,适合在普通硬件上运行强大推理&…...
Android逆向实战:用Frida Hook自己写的APK,让1+1=88(附完整代码)
Android逆向实战:用Frida Hook自己写的APK,让1188(附完整代码) 在移动安全领域,逆向工程一直是个充满挑战又极具魅力的方向。想象一下,你能否让一个简单的计算器应用突然改变行为,比如让11的结果…...
华硕梅林固件下,让HP1020打印机在Linux网络环境中重获新生
1. 为什么HP1020打印机在Linux网络环境中会"罢工"? 每次看到那台尘封已久的HP LaserJet 1020打印机,我都觉得特别可惜。这台老伙计在Windows系统下表现一直很稳定,但当我尝试把它接入刷了梅林固件的华硕路由器时,却遇到…...
Arduino Nano与SSD1306实战:从静态位图到动态动画的完整实现
1. Arduino Nano与SSD1306 OLED屏入门指南 如果你手头正好有一块Arduino Nano开发板和SSD1306驱动的OLED屏幕,想要实现从静态图片显示到动态动画的效果,那这篇文章就是为你准备的。我最近在做一个智能家居项目时,正好用到了这个组合ÿ…...
