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表达式的主要动机之一,简化代码,提高开发效率。