多執行緒併發基礎外傳之lambda表示式
theme: smartblue
1. 寫在前面
為什麼扯到了lambda?其實也是和Runnable
介面有關係。其實,Runnable
是一個函式式介面,可以用lambda表示式來建立其物件。
2. lambda表示式簡介
總體來說,lambda屬於函數語言程式設計的概念,它可以避免匿名內部類定義過多,也可以簡化程式碼。
關於函數語言程式設計的概念,對我來說還算模糊,所以不在這裡誤導大家了,那麼函式式介面,是什麼意思呢?其實,函式式介面,就是只包含一個抽象方法的介面。兩個重點,“一個”還有“抽象”。
那麼,對於函式式介面,我們就可以使用lambda表示式來建立該介面的物件
3. 看個例子吧
其實在這裡,最經典的例子,還是Runnable
介面。我們可以看下Runnable
介面的定義
在這個接口裡面,只有一個抽象方法
run
,所以Runnable
介面就是一個函式式介面。那麼我們怎麼通過lambda表示式進行簡化呢
不用lambda表示式,怎麼建立執行緒(匿名內部類)
java
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是執行緒");
}
});
用lambda表示式,怎麼建立執行緒
java
Thread thread = new Thread(() -> System.out.println("我是執行緒"));
thread.start();
我們發現,直接用一對括號表示引數,加個箭頭,指向函式體,就可以不用寫一個匿名內部類了。
4. 還不懂?沒關係,我們再看個例子
首先我們定義一個函式式介面。
java
interface MyInterface {
public abstract void doSomething(int a);
}
用匿名內部類建立其物件
java
MyInterface myInterface = new MyInterface() {
@Override
public void doSomething(int a) {
System.out.println("做點啥吧");
}
};
myInterface.doSomething(1);
用lambda表示式建立其物件
java
MyInterface myInterface = (int a) -> System.out.println("做點啥吧");
myInterface.doSomething(1);
其實這裡的lambda表示式還可以簡化,並且當函式體不只是一行程式碼的時候,花括號也不可省略了。但細節的就不再多介紹了,畢竟,這裡只是一個入門文章,只要懂了lambda表示式怎麼來的,以及它的定義,那這篇文章就實現它的價值了。
5. 總結一下
Runnable
是一個函式式介面,在建立物件時可以用lambda表示式簡化,lambda表示式既可以避免匿名內部類定義過多,也可以用來簡化程式碼。