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("布置现场");
        }
    }
    
posted @ 2021-01-21 11:09  迪迦是真的  阅读(96)  评论(0)    收藏  举报
//复制代码按钮 //代码行号 //评论