多執行緒併發基礎外傳之lambda表示式

語言: CN / TW / HK

theme: smartblue

1. 寫在前面

為什麼扯到了lambda?其實也是和Runnable介面有關係。其實,Runnable是一個函式式介面,可以用lambda表示式來建立其物件。

2. lambda表示式簡介

總體來說,lambda屬於函數語言程式設計的概念,它可以避免匿名內部類定義過多,也可以簡化程式碼

關於函數語言程式設計的概念,對我來說還算模糊,所以不在這裡誤導大家了,那麼函式式介面,是什麼意思呢?其實,函式式介面,就是只包含一個抽象方法的介面。兩個重點,“一個”還有“抽象”。

那麼,對於函式式介面,我們就可以使用lambda表示式來建立該介面的物件

3. 看個例子吧

其實在這裡,最經典的例子,還是Runnable介面。我們可以看下Runnable介面的定義

image.png 在這個接口裡面,只有一個抽象方法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表示式既可以避免匿名內部類定義過多,也可以用來簡化程式碼。