多线程的底层原理和应用
多线程的应用
多线程知道怎么开启线程的只是基础,下面的例子中都是不同场景下对多线程的应用
静态代理模式
-
静态代理模式其实就是Thread的实现原理
-
代码如下
package com.xiaoke.study.day01.com.xiaoke.study.Demo03_Threand; //写网上的一个内容 //以结婚举例,接口是结婚 //两个方法使用接口,一个是自己,一个是婚庆公司 //然后在婚庆公司的方法中用自己代入 public class StaticProxy { public static void main(String[] args) { //静态代理总结 /** * 1.真实对象(我)和代理对象(婚庆公司)实现同一个接口 * 2.代理对象要代理真实角色(使用构造方法加一个参数,参数是实现的接口类型就可以) * */ //优点 /** * 1,代理对象可以做很多真实对象做不了的事(即多余的事) * 2.真实对象可以专注做自己的事(比如我只结婚) * */ // new Thread(new Runnable() { // @Override // public void run() { // System.out.println("我完成了这个事"); // } // } // ).start(); //上面注释的7行部分的内容等同于下面这句 new Thread(()-> System.out.println("我完成了这个事")).start(); //下面这行代码就是上面这行代码即线程的底部实现原理 new WeddingCompany(new My()).haveMarry(); //上面这行代码就是下面这两行代码的简化 // WeddingCompany weddingCompany = new WeddingCompany(new My()); // weddingCompany.haveMarry(); } } //结婚的接口 interface Marry{ void haveMarry(); } //自己继承这个接口 class My implements Marry{ @Override public void haveMarry() { System.out.println("我结婚了"); } } //婚庆公司继承这个接口 class WeddingCompany implements Marry{ Marry target; public WeddingCompany(Marry target) { this.target = target; } @Override public void haveMarry() { BeforeMarry(); this.target.haveMarry(); AfterMarry(); } private void BeforeMarry() { System.out.println("结婚前婚庆公司的准备"); } private void AfterMarry() { System.out.println("结婚后婚庆公司的收拾"); } }
lambda表达式(扩展)
-
λ是希腊字母的第十一个,英语名字为lambda,这个表达式作用总结来说就是简化,如下
new Thread(()-> System.out.println("完成了简化")).start()
作用
- 避免匿名内部类定义过多
- 可以让代码看上去更简洁
- 去掉了冗余代码
-
函数式接口(Functional Interface)是学习lambda的关键
定义
-
任何接口,如果只包含一个抽象方法,那么它就是一个函数式接口,如下
public interface Runnable { public abstract void run(); }
-
对于函数式接口,我们可以通过lambda表达式创建该接口的对象
package com.xiaoke.study.day01.com.xiaoke.study.Demo04_Lambda; /** * 推导lambda表达式 * */ public class Lambda { public static void main(String[] args) { LamTest lamTest = new Test(); } Test test = new Test(); } //1.定义一个只有一个抽象方法的接口(即函数式接口) interface LamTest{ void LanbdaWay(); } //2.定义一个方法,实现上面的这个接口 class Test implements LamTest{ @Override public void LanbdaWay() { System.out.println("这是对于实现接口的方法"); } }
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)