当前位置: 首页 > news >正文

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务

12. 四大函数式接口

新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算

函数式接口:只有一个方法的接口,可以有一些默认的方法

如:Runnable接口函数

在这里插入图片描述

1)Function 函数型接口

在这里插入图片描述

public class FunctionDemo {public static void main(String[] args) {Function<String, String> function = (str) -> {return str;};System.out.println(function.apply("aaaaaaaaaa"));}
}

2)Predicate 断定型接口

在这里插入图片描述

public class PredicateDemo {public static void main(String[] args) {Predicate<String> predicate = (str) -> {return str.isEmpty();};// falseSystem.out.println(predicate.test("aaa"));// trueSystem.out.println(predicate.test(""));}
}

3)Consummer 消费型接口

在这里插入图片描述

在这里插入图片描述

/*** 消费型接口 没有返回值!只有输入!*/
public class Demo3 {public static void main(String[] args) {Consumer<String> consumer = (str)->{System.out.println(str);};consumer.accept("abc");}
}

4)Suppier 供给型接口

在这里插入图片描述

在这里插入图片描述

/*** 供给型接口,只返回,不输入*/
public class Demo4 {public static void main(String[] args) {Supplier<String> supplier = ()->{return "1024";};System.out.println(supplier.get());}

13. Stream 流式计算

在这里插入图片描述
在这里插入图片描述

/*** Description:* 题目要求: 用一行代码实现* 1. Id 必须是偶数* 2.年龄必须大于23* 3. 用户名转为大写* 4. 用户名倒序* 5. 只能输出一个用户**/public class StreamDemo {public static void main(String[] args) {User u1 = new User(1, "a", 23);User u2 = new User(2, "b", 23);User u3 = new User(3, "c", 23);User u4 = new User(6, "d", 24);User u5 = new User(4, "e", 25);List<User> list = Arrays.asList(u1, u2, u3, u4, u5);//封装对象// lambda、链式编程、函数式接口、流式计算list.stream().filter(user -> {return user.getId()%2 == 0;}).filter(user -> {return user.getAge() > 23;}).map(user -> {return user.getName().toUpperCase();}).sorted((user1, user2) -> {return user2.compareTo(user1);}).limit(1).forEach(System.out::println);}
}

14. ForkJoin

ForkJoin 在JDK1.7,并行执行任务提高效率~。在大数据量速率会更快

大数据中:MapReduce 核心思想->把大任务拆分为小任务!

在这里插入图片描述

1)ForkJoin 特点: 工作窃取!

实现原理是:双端队列!从上面和下面都可以去拿到任务进行执行
在这里插入图片描述

2)如何使用ForkJoin?

  • 1、通过ForkJoinPool来执行
  • 2、计算任务 execute(ForkJoinTask task)
  • 3、计算类要去继承ForkJoinTask;
理解API

在这里插入图片描述

ForkJoin 的计算类

package com.marchsoft.forkjoin;import java.util.concurrent.RecursiveTask;public class ForkJoinDemo extends RecursiveTask<Long> {private long star;private long end;/** 临界值 */private long temp = 1000000L;public ForkJoinDemo(long star, long end) {this.star = star;this.end = end;}/*** 计算方法* @return*/@Overrideprotected Long compute() {if ((end - star) < temp) {Long sum = 0L;for (Long i = star; i < end; i++) {sum += i;}return sum;}else {// 使用ForkJoin 分而治之 计算//1 . 计算平均值long middle = (star + end) / 2;ForkJoinDemo forkJoinDemo1 = new ForkJoinDemo(star, middle);// 拆分任务,把线程压入线程队列forkJoinDemo1.fork();ForkJoinDemo forkJoinDemo2 = new ForkJoinDemo(middle, end);forkJoinDemo2.fork();long taskSum = forkJoinDemo1.join() + forkJoinDemo2.join();return taskSum;}}
}

测试类

package com.marchsoft.forkjoin;import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;public class ForkJoinTest {private static final long SUM = 20_0000_0000;public static void main(String[] args) throws ExecutionException, InterruptedException {test1();test2();test3();}/*** 使用普通方法*/public static void test1() {long star = System.currentTimeMillis();long sum = 0L;for (long i = 1; i < SUM ; i++) {sum += i;}long end = System.currentTimeMillis();System.out.println(sum);System.out.println("时间:" + (end - star));System.out.println("----------------------");}/*** 使用ForkJoin 方法*/public static void test2() throws ExecutionException, InterruptedException {long star = System.currentTimeMillis();ForkJoinPool forkJoinPool = new ForkJoinPool();ForkJoinTask<Long> task = new ForkJoinDemo(0L, SUM);ForkJoinTask<Long> submit = forkJoinPool.submit(task);Long along = submit.get();System.out.println(along);long end = System.currentTimeMillis();System.out.println("时间:" + (end - star));System.out.println("-----------");}/*** 使用 Stream 流计算*/public static void test3() {long star = System.currentTimeMillis();long sum = LongStream.range(0L, 20_0000_0000L).parallel().reduce(0, Long::sum);System.out.println(sum);long end = System.currentTimeMillis();System.out.println("时间:" + (end - star));System.out.println("-----------");}
}

.parallel().reduce(0, Long::sum)使用一个并行流去计算整个计算,提高效率。

在这里插入图片描述

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

相关文章:

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务

12. 四大函数式接口 新时代的程序员&#xff1a;lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口&#xff1a;只有一个方法的接口&#xff0c;可以有一些默认的方法 如&#xff1a;Runnable接口函数 1&#xff09;Function 函数型接口 public class Functio…...

【Tomcat与网络4】Tomcat的连接器设计

目录 1 如何设计一个灵活可靠的连接器 2 主要组件介绍 在上一篇&#xff0c;我们介绍了Tomcat提供服务的整体结构&#xff0c;本文我们一起来看一下Tomcat的连接器的设计。 在前面我们提到Tomcat主要完成两个功能&#xff1a; 处理 Socket 连接&#xff0c;负责网络字节流与…...

k8s中调整Pod数量限制的方法

一、介绍 Kubernetes节点每个默认允许最多创建110个pod&#xff0c;有时可能由于主机配置扩容的问题&#xff0c;从而需要修改节点pod运行数量的限制。 即&#xff1a;需要调整Node节点的最大可运行Pod数量。 一般来说&#xff0c;只需要在kubelet启动命令中增加–max-pods参数…...

在Java中,实现扩展性通常有几种方法,其中包括接口、抽象类、插件架构和服务加载等方式

在Java中&#xff0c;实现扩展性通常有几种方法&#xff0c;其中包括接口、抽象类、插件架构和服务加载等方式。以下是如何使用接口来实现灵活的扩展和插件管理的一些基本指导&#xff1a; 定义基础接口&#xff1a; 创建一个或多个基础接口&#xff0c;这些接口定义了所有实现…...

【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络

课题名称&#xff1a;基于自适应SPREAD-PNN的乳腺肿瘤诊断分类及预测 版本日期&#xff1a;2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院经过多年的收集和整理&…...

蓝桥杯AT24C02问题记录

问题1&#xff1a;从这个图片上可以看出这两个在IIC的.c文件里延时时间不一样&#xff0c;第一张图使用了15个_nop_(); 12M晶振机器周期是 1/12M*121uS&#xff1b;nop()要延时1个指令周期。延时时间不对会对时序产生影响&#xff0c;时序不对&#xff0c;则AT24C02有没被使用…...

adb控制设备状态

屏幕设置 屏幕亮度 # 当前屏幕亮度 adb shell settings get system screen_brightness# 更改屏幕亮度adb shell settings put system screen_brightness屏幕休眠时间 # 当前屏幕休眠时间 adb shell settings get system screen_off_timeout#更改屏幕休眠时间 adb shell sett…...

订婚支出及共同生活消费是否属于彩礼?应否返还?

恋爱期间&#xff0c;男女双方为增进情感而互赠财物的现象十分普遍。而当双方关系结束时&#xff0c;赠送财物的一方要求对方返还时&#xff0c;法院能否支持其主张&#xff1f; 一起男方向女方及女方母亲索要彩礼及恋爱期间花销钱款引发的婚约财产纠纷案&#xff0c;法院综合双…...

MicroPython核心:优化

MicroPython使用多种优化方法来节省RAM&#xff0c;同时确保程序的高效执行&#xff0c;本文会讨论其中的一些优化。 提示&#xff1a; MicroPython 字符串驻留&#xff08;string interning&#xff09; 和映射和字典(Maps and Dictionaries) 详细介绍了对字符串和字典的其他…...

Opencv——霍夫变换

霍夫直线变换 霍夫直线变换(Hough Line Transform)用来做直线检测 为了加升大家对霍夫直线的理解,我在左图左上角大了一个点,然后在右图中绘制出来经过这点可能的所有直线 绘制经过某点的所有直线的示例代码如下,这个代码可以直接拷贝运行 import cv2 as cv import matplot…...

Github 2024-01-28 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-28统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目2Rust项目1HTML项目1JavaScript项目1Cuda项目1C#项目1非开发语言项目1 Nuxt&#…...

【大数据安全】大数据安全的挑战与对策基础设施安全

目录 一、大数据安全的挑战与对策 &#xff08;一&#xff09;数据加密技术 &#xff08;二&#xff09;大数据安全与隐私 &#xff08;三&#xff09;大数据安全保障体系 &#xff08;四&#xff09;华为大数据安全解决方案 二、基础设施安全 &#xff08;一&#xff0…...

【LLM多模态】Cogview3、DALL-E3、CogVLM、CogVideo模型

note 文章目录 noteVisualGLM-6B模型图生文&#xff1a;CogVLM-17B模型1. 模型架构2. 模型效果 文生图&#xff1a;CogView3模型DALL-E3模型CogVideo模型网易伏羲-丹青模型Reference VisualGLM-6B模型 VisualGLM 是一个依赖于具体语言模型的多模态模型&#xff0c;而CogVLM则是…...

python爬虫学习之selenium_chrome handless的使用

目录 一、Chrome handless简介 二、Chrome handless的系统要求 三、Chrome handless的基本配置 &#xff08;直接复制放在.py文件开头&#xff09; 四、Chrome handless 的应用 五、Chrome handless的封装 一、Chrome handless简介 Chrome handless 模式&#xff0c;Goog…...

Spring boot + Azure OpenAI 服务 1.使用 GPT-35-Turbo

Azure OpenAI 服务使用 GPT-35-Turbo 先决条件 maven 注意 beta.6 版本 <dependency><groupId>com.azure</groupId><artifactId>azure-ai-openai</artifactId><version>1.0.0-beta.6</version></dependency>问答工具类 pack…...

Vite+Vue3使用Vue-i18n笔记

一、下载依赖 vue-i18n yarn add vue-i18n创建存放语言文件的目录 以及配置文件的配置 我是在src/lang 新建index.ts、cn.ts、en.ts以及test文件夹其中再分别新建cn.ts以及en.ts /lang/index.ts 用于导出vue-i18n需要的配置对象 import en from "./en.ts"; import…...

流量密码《幻兽帕鲁》5天狂销700万份

*** 流量密码《幻兽帕鲁》5天狂销700万份 2024年&#xff0c;一匹游戏业的黑马没有预兆地就这么出现了 这就是《幻兽帕鲁》 它首日销量轻松达到200万&#xff0c;5天时间手到擒来700万销量&#xff0c;直接收入超15亿&#xff0c;刷新多个游戏市场纪录。 同时在线玩家数高达…...

怎么查询鸿蒙真机支持的API版本

1、打开设备的开发者模式与USB调试并通过USB连接上电脑。 2、管理员身份运行cmd。 3、进入hdc.exe所在目录。(鸿蒙OS IDE的SDK下载目录中) 4、输入hdc shell&#xff0c;进入特殊模式 5、输入 getprop hw_sc.build.os.apiversion 查看API版本 6、输入 getprop hw_sc.build…...

【NodeJS】005- NodeJS的NVM与express框架

1.NVM介绍与使用 1.介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具,方便切换不同版本的Node.js 2.使用 nvm 的使用非常的简单,跟 npm 的使用方法类似 3.下载安装 首先先下载 nvm,下载地址 https://github.com/coreybutler/nvm-windows/rel…...

pandas使用read_csv时报错解决

问题描述&#xff1a; 在使用read_csv时报错&#xff1a; UnicodeDecodeError: utf-8 codec cant decode byte 0xc9 in position 9451: invalid continuation byte 或者&#xff1a; UnicodeDecodeError: gb2312 codec cant decode byte 0x88 in position 68296: illegal m…...

BetterGI:解放双手的5大自动化场景终极解决方案

BetterGI&#xff1a;解放双手的5大自动化场景终极解决方案 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 | 自动烹饪…...

【教育科技爆款内容生产核心】:用ChatGPT批量生成带答案解析+难度分级+认知维度标签的脑筋急转弯(附可商用JSON Schema)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;教育科技爆款内容生产的底层逻辑重构 教育科技领域的“爆款”并非偶然产物&#xff0c;而是内容价值、用户认知路径与算法分发机制三者深度耦合的结果。传统以课程大纲为中心的线性生产范式&#xff0c;正被“…...

3分钟快速上手:通达信缠论可视化插件终极使用指南

3分钟快速上手&#xff1a;通达信缠论可视化插件终极使用指南 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 通达信缠论可视化插件是一款专为股票投资者设计的缠论技术分析工具&#xff0c;能够将复杂的…...

美团mtgsig签名环境模拟:Android Native层风控对抗实战

1. 这不是写个JS就能跑通的事&#xff1a;为什么mtgsig签名环境模拟是逆向工程里最硬的骨头“美团外卖mtgsig签名”这八个字&#xff0c;在安卓逆向、风控对抗、自动化测试圈子里&#xff0c;几乎等同于一道分水岭。它不像普通API签名那样靠抓包改参就能绕过&#xff0c;也不像…...

应对野外挑战:鼎讯GO-50PRO在交通光缆施工中的核心优势

在铁路、高速公路等交通基础设施的智能化建设中&#xff0c;稳定高效的光纤网络是指挥调度、安全监控等核心系统运行的生命线。鼎讯GO-50PRO光时域反射仪&#xff0c;作为一款集成了多种测试功能的专业设备&#xff0c;正成为保障这些关键通信链路畅通无阻的可靠选择。无惧恶劣…...

AI开发~OpenAI专家之路:构建企业级AI应用(第三部分·上)

第七部分&#xff1a;LLM应用测试与评估——确保质量的关键7.1 为什么需要测试LLM应用&#xff1f;大白话解释&#xff1a; 想象你开了一家餐厅&#xff0c;请了一位大厨&#xff08;AI模型&#xff09;来做菜。但是这位大厨有个特点——每次做出来的菜味道可能不太一样。有时候…...

Taotoken控制台用量看板提供的洞察与规划价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken控制台用量看板提供的洞察与规划价值 对于依赖大模型API进行开发的项目团队而言&#xff0c;成本与用量的不透明常常是管理…...

Adobe Illustrator自动化脚本终极指南:告别重复劳动的设计神器

Adobe Illustrator自动化脚本终极指南&#xff1a;告别重复劳动的设计神器 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾经在Adobe Illustrator中为了调整几十个画板而重…...

GitHub中文界面终极汉化指南:5分钟告别英文困扰

GitHub中文界面终极汉化指南&#xff1a;5分钟告别英文困扰 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub复杂的英文界…...

如何快速释放微信空间:CleanMyWechat终极清理指南

如何快速释放微信空间&#xff1a;CleanMyWechat终极清理指南 【免费下载链接】CleanMyWechat 自动删除 PC 端微信缓存数据&#xff0c;包括从所有聊天中自动下载的大量文件、视频、图片等数据内容&#xff0c;解放你的空间。 项目地址: https://gitcode.com/gh_mirrors/cl/C…...