Java基础 -多线程Lambda表达式及静态代理

188 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

Lamda表达式

  • λ希腊字母表中排序第是一位的字母,英语名称为Lambda
  • 避免匿名内部类定义过多
  • 其实质属于函数式编制的概念
(params)→expression[表达式]
(params)→statement[语句]
(params)→{statements}

new Thread ((->System.out.printlm("多线程学习")).start();

  • 为什么要使用lambda表达式
  • 避免匿名内部类定义过多
  • 可以让你的代码看起来更简洁
  • 丢掉一堆没有意义的代码,只留下核心的逻辑 理解Functional lnterface(函数式接口)是学习Java8 lambda表达式的关键所在
  • 函数式接口的定义:
  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
  • 对于函数式接口,我们可以通过lambda表达式来创建接口的对象
   public static void main(String[] args) {
        Ilove love=null;
         love = a -> {
            System.out.println("i love you->" + a);
        };
        love.love("zt");
    }
    interface Ilove {
        void love(String a);
    }
}

总结

  • lambda表达式只有一行代码的情况下才能简化成一行,如果有多行则需要使用代码块
  • 前提是接口为函数式接口,方法只能有一个
  • 多个参数也可以去掉参数类型,要去掉就都去掉,但要加括号love=(a,b)->

静态代理

  • 你:真实角色
  • 婚庆公司:代理你,帮你处理结婚的事
  • 结婚:实现都实现结婚接口即可
   public static void main(String[] args) {
        wedding wedding = new wedding(new you());
        wedding.happy();
    }
}
interface Mraay{
    void happy();
}
//真实角色:你去结婚
class you implements Mraay{
    @Override
    public void happy() {
        System.out.println("结婚了");
    }
}
//代理角色:帮助你结婚
class wedding implements Mraay{
//代理谁
    private Mraay target;
    public wedding(Mraay target) {
        this.target = target;
    }
    @Override
    public void happy() {
        before();
        this.target.happy();//这就是真实的对象
        after();

    }
    private void before(){
        System.out.println("结婚前");
    }  private void after(){
        System.out.println("结婚后");
    }
}

静态代理模式总结

  • 真实对象和代理对象都要实现同一个接口
  • 代理对象要代理真实角色 所以需要一个参数来传入
  • 好处:代理对象可以做很多真实对象做不了的事情,真实对象只专注自己的事情
  • 婚庆公司==Thred
  • run()用线程的对象,调用的方法及run()在这里就是lambda表达式的实现方法