java多线程:Lamda表达式/静态代理
Lamda表达式
-
避免匿名内部类定义过多
-
其实质属于函数式编程的概念
-
可以让代码看起来很简洁
-
去掉了一堆没有意义的代码,只留下核心的逻辑
-
函数式接口
Functional Interface:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口(两个必要条件:必须是接口;只有一个方法(除 Object 类包含的方法))//推导lambda表达式 public class TestLambdal { //3.静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("bbbbb"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like=new Like2(); like.lambda(); //4.局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("ccccccc"); } } like=new Like3(); like.lambda(); //5.匿名内部类:没有类的名称,必须借助接口或父类 like=new ILike() { @Override public void lambda() { System.out.println("ddddddd"); } }; like.lambda(); //6.用lambda简化 like=()->{ System.out.println("eeeeeee"); }; like.lambda(); //继续简化 like=()-> System.out.println("fffff"); like.lambda(); } } //1.定义一个函数式接口 interface ILike{ void lambda(); } //2.实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("aaaaa"); } } -
总结:
- lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,要用代码块包裹
- 方法有参数时,可以去掉参数类型
静态代理
-
真实对象和代理对象都要实现同一个接口
-
代理对象要代理真实角色
-
好处:
- 代理对象可以做很多真实对象做不了的事情
- 真实对象专注做自己的事情
-
静态代理其实是多线程的底部实现原理
public class StaticProxy { public static void main(String[] args) { new Thread(()-> System.out.println("I love you")).start(); //上面的Thread类 代理了一个真实的Runnable接口 new WeddingCompany(new You()).HappyMarry(); } } interface Marry{ void HappyMarry(); } //真实角色,你去结婚 class You implements Marry{ @Override public void HappyMarry() { System.out.println("结婚~"); } } //代理角色,婚庆公司 class WeddingCompany implements Marry{ private Marry target; public WeddingCompany(Marry target) { this.target = target; } @Override public void HappyMarry() { before(); this.target.HappyMarry();//真实对象 after(); } private void after() { System.out.println("交钱"); } private void before() { System.out.println("布置现场"); } }

浙公网安备 33010602011771号