Java多线程-——静态代理以及Lambda表达式(基于狂神说的学习笔记)

静态代理

package demo02;// 静态代理模式总结:
// 真实对象和代理对象都要实现同一个接口
// 代理对象要代理真实角色/*
好处:
代理对象可以做很多真实对象做不了的事情
真实对象专注做自己的事情*/
public class StaticProxy {public static void main(String[] args) {// Thread 实现了runnable接口,相当于runnable接口的代理,并最后实现了runnable接口的start方法new Thread(()-> System.out.println("这里使用线程与lambda")).start();new WeddingCompany(new You()).HappyMarry();}
}interface Marry{void HappyMarry();
}// 真实角色
class You implements  Marry{@Overridepublic void HappyMarry() {System.out.println("happyMarry");}
}// 代理角色
class WeddingCompany implements Marry{// 代理->真实目标角色private  Marry target;public  WeddingCompany(Marry target){this.target = target;}@Overridepublic void HappyMarry() {before();this.target.HappyMarry();// 这就是真实对象after();}private void before() {System.out.println("布置场景");}private void after() {System.out.println("收尾款");}
}

Lambda表达式

Lambda表达式的出现是为了:

  • 避免匿名内部类定义过多
  • 其实质属于函数式编程的概念

例如:

new Thread(()->System.out.println("多线程-----")).start();

为什么要使用lambda表达式:

  • 避免匿名内部类定义过多
  • 可以让代码看起来更简洁
  • 去掉没有意义的代码,只留下核心的逻辑

理解Functional Interface(函数式接口):

函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable{// 一个接口只包含一个抽象方法public abstract void run();
}
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

对于实现函数式接口的多种形式:实现类,静态内部类,局部内部类,匿名内部类,lambda表达式

/*
推导lambda表达式*/
public class TestLambda {// 3.静态内部类static class Like2 implements ILike{@Overridepublic void lambda() {System.out.println("I like a lambda2.");}}public static void main(String[] args) {// 测试实现类ILike like = new Like();like.lambda();// 测试静态内部类like = new Like2();like.lambda();// 4.局部内部类class Like3 implements ILike{@Overridepublic void lambda() {System.out.println("I like a lambda3.");}}// 测试局部内部类like = new Like3();like.lambda();// 5.匿名内部类,没有类的名称,必须要借助接口或者父类like = new ILike(){@Overridepublic void lambda() {System.out.println("I like a lambda4");}};like.lambda();//6.用lambda表达式简化// 因为like是接口的一个实现对象,而该接口为函数式接口(仅有一个抽象方法)// 因此可以在实现抽象方法时可以省略其名字,就变成了lambda表达式like = ()->{System.out.println("I like a lambda5");};like.lambda();}}//1.定义一个函数式接口
interface ILike{void lambda();
}
//2.实现类
class Like implements ILike{@Overridepublic void lambda() {System.out.println("I like a lambda.");}
}

Lambda表达式的多种简化形式

public class TestLambda2 {public static void main(String[] args) {ILambda iLambda = null;// 1.lambda表达式iLambda = (int a )->{System.out.println("This is lambda"+a);};// 2.简化数据类型iLambda = (a)->{System.out.println("This is lambda"+a);};// 3.简化括号iLambda = a -> {System.out.println("This is lambda"+a);};// 4. 简化花括号iLambda = a -> System.out.println("This is lambda"+a);iLambda.lambda(10);}}interface ILambda{void lambda(int a );
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改ubuntu服务器fs文件最大打开数

起因 在对项目进行压测的时候,请求异常 java.net.SocketException: socket closed,查看nginx代理服务器的日志。tail -f -n500 /var/log/nginx/error.log 显示 文件打开数太多socket() failed (24: Too many open files) while connecting to upstream …

Kubernetes核心组件Services

1. Kubernetes Service概念 Service是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的POD(容器)应用提供统一的访问入口,并且将请求进行负载分发到后端的各个容器应用上。 在Kubernetes中&#xf…

C++ opencv实现letterbox

代码&#xff1a; #include <iostream> #include "string" #include "opencv2/opencv.hpp"cv::Mat preprocess_img(cv::Mat& img, int input_w,int input_h) {int w,h,x,y;float r_winput_w/(img.cols*1.0);float r_hinput_h/(img.rows*1.0);if…

虚拟信用卡:如何获取、推荐平台及对注册开发者账号的应用

虚拟信用卡是一种不需要实体卡片即可使用的信用卡&#xff0c;它的卡号、过期日期和安全码等信息都是通过电子形式提供给用户。 在使用之前&#xff0c;通常需要先进行充值。虚拟信用卡可以像实体信用卡一样&#xff0c;能与在线购物、订阅服务以及其他需要信用卡支付的场景相…

凉鞋的 Godot 笔记 108. 第二个通识:增删改查

在这一篇&#xff0c;我们来学习此教程的第二个通识&#xff0c;即&#xff1a;增删改查。 增删改查我们不只是一次接触到了。 在最先接触的场景窗口中&#xff0c;我们是对 Node 进行增删改查。 在文件系统窗口中&#xff0c;我们是对文件&文件夹进行增删改查&#xff1…

SpringBoot 时 jar 报错 没有主清单属性

SpringBoot 时 jar 报错 没有主清单属性 参考资料 使用阿里版 Spring Initializr 创建的项目。 springboot 2.6.13 JDK 1.8 这里自动开了skip。 注释后打的 jar 包就可以运行了。 <build><finalName>${name}</finalName><plugins><plugin><…

[Spring]事务的传播机制

一、背景 Mysql在修改完数据后&#xff0c;默认会自动触发事务Commit提交。 而在我们服务的一个方法里&#xff0c;需要多次修改Mysql记录。 为了保证原子性&#xff0c;我们需要将Mysql设为手动提交&#xff0c;多次修改后再commit提交。 二、Spring事务 1、编程式事务管理…

leetCode 583.两个字符串的删除操作 动态规划 + 优化空间复杂度(二维dp、一维dp)

583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 &qu…

Go HTTP 调用(下)

今天分享的内容是 Go HTTP 调用。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&#xff0c;如果本文有错误的地方&#xff0c;欢迎指出&#xff01; 前言 上篇文章 Go HTTP 调用&#…

基于springboot实现校园闲置物品交易平台系统项目【项目源码+论文说明】

基于springboot实现校园闲置物品交易平台系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的交易方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&am…

nodejs+vue+elementui酒店客房服务系统mysql带商家

视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 简单的说 Node.js 就是运行在服务端的 JavaScript。 前端技术&#xff1a;nodejsvueel…

Faust勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; Faust勒索病毒是一种致命的网络威胁&#xff0c;它以强力数据加密为手段&#xff0c;将您的文件变成无法触及的谜题。如果不幸感染&#xff0c;您将面临一个无情的选择&#xff1a;支付比特币赎金或永远失去宝贵的数据。以下是如何理解Faust勒索病毒&#xf…

提高爬虫效率的秘诀之一:合理配置库池数量

在提高爬虫效率的过程中&#xff0c;合理配置库池数量是一个重要的秘诀。通过增加或减少库池的数量&#xff0c;可以有效提升爬虫系统的效率和稳定性。本文将介绍如何合理配置库池数量&#xff0c;以及配置不同数量库池的优缺点&#xff0c;帮助您提高爬虫效率&#xff0c;顺利…

基于单目相机的2D测量(工件尺寸和物体尺寸)

目录 1.简介 2.基于单目相机的2D测量 2.1 想法&#xff1a; 2.2 代码思路 2.2 主函数部分 1.简介 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2…

Go语言入门心法(二): 结构体

Go语言入门心法(一) Go语言入门心法(二): 结构体 一: Go语言中结构体认知 go语言中的结构体认知升维:go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象go语言中的结构体融合了c语言中的结构体体征和面…

OpenCV6-图形绘制

OpenCV6-图形绘制 1.绘制圆形2.绘制直线3.绘制椭圆4.绘制多边形5.文字生成6.demo 1.绘制圆形 void cv::circle(InputOutputArray img, // 需要绘制圆形的图像Point center, // 圆心坐标int radius, // 半径&#xff0c;单位为像素const Scalar& colo…

Xshell7和Xftp7超详细下载教程(包括安装及连接服务器附安装包)

1.下载 1.官网地址&#xff1a; XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项&#xff0c;然后无脑下一步 3.连接服务器 1.打开Xshell7&#xff0c;然后新建会话 2.填写相关信息 出现Connection establi…

JVM 性能调优参数

JVM分为堆内存和非堆内存 堆的内存分配用-Xms和-Xmx -Xms分配堆最小内存&#xff0c;默认为物理内存的1/64&#xff1b; -Xmx分配最大内存&#xff0c;默认为物理内存的1/4。 非堆内存分配用-XX:PermSize和-XX:MaxPermSize -XX:PermSize分配非堆最小内存&#xff0c;默认为物理…

【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

文章目录 【LeetCode高频SQL50题-基础版】打卡第5天&#xff1a;第26~30题⛅前言超过5名学生的课&#x1f512;题目&#x1f511;题解 求关注者的数量&#x1f512;题目&#x1f511;题解 只出现一次的最大数字&#x1f512;题目&#x1f511;题解 买下所有产品的客户&#x1f…

《进化优化》第4章 遗传算法的数学模型

文章目录 4.1 图式理论4.2 马尔可夫链4.3 进化算法的马尔可夫模型的符号4.4 遗传算法的马尔可夫模型4.4.1 选择4.4.2 变异4.4.3 交叉 4.5 遗传算法的动态系统模型4.5.1 选择4.5.2 变异4.5.3 交叉 4.1 图式理论 图式是描述一组个体的位模式&#xff0c;其中用*来表示不在乎的位…