Thread构造方法如下
public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); }
Runnable 是一个接口
@FunctionalInterface public interface Runnable { public abstract void run(); }
调用对比:
public class App { public static void main(String[] args) { //default new Thread(new Task()).start(); //匿名内部类 new Thread(new Runnable() { @Override public void run() { System.out.println("002"); } }).start(); //Lambda表达式 new Thread(() -> { System.out.println("003"); }).start(); } } class Task implements Runnable { @Override public void run() { System.out.println("001"); } }
所以,不是所有使用匿名内部类的地方都可以使用Lambda表达式代替。
ref: https://www.geeksforgeeks.org/difference-between-anonymous-inner-class-and-lambda-expression/