如何使用Lambda表达式实现Runnable接口?

Runnable接口是一个典型的函数式接口,它只有一个run()方法,没有参数也没有返回值。所以我们可以很容易地使用Lambda表达式来实现它。
例如:

// 使用Lambda表达式实现Runnable接口
Runnable runnable = () -> System.out.println("Hello");

这里() -> System.out.println("Hello")就是一个Lambda表达式,它实现了Runnable接口,所以可以赋值给Runnable类型的变量。

我们可以将这个Runnable实例作为线程执行:

new Thread(runnable).start(); 

这会启动一个新的线程,并执行我们定义的Lambda表达式。

再举一个例子:

Runnable runnable = () -> {
    String name = "John";
    int age = 30;
    System.out.println(name + ", " + age);  
};
new Thread(runnable).start();

这里我们在Lambda表达式中使用了外层作用域的局部变量name和age。这也是Lambda表达式的一个重要特点,它可以捕获定义它的作用域中的变量。
相比之下,如果使用匿名内部类实现Runnable接口,代码会更加冗长:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }  
}; 

可以看出,Lambda表达式使得代码更加简洁紧凑。这也是Java 8引入Lambda表达式的主要动机之一,简化代码,提高开发效率。