java多執行緒:Lamda表示式/靜態代理
阿新 • • 發佈:2021-01-21
目錄
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("佈置現場"); } }