Runnable接口
@FunctionalInterface // 被该注解修饰的接口只能声明一个抽象方法
public interface Runnable {
public abstract void run();
}
代码结构
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("新线程中执行的代码 :"+Thread.currentThread().getName());
}
}).start();// 不是用lambda的创建线程的写法
以上述代码为例:
使用Lambda简化
当然还可以做到更加简化 在下面会详细介绍
new Thread(() ->{
System.out.println("新线程中执行的代码 :"+Thread.currentThread().getName());
}).start();
Lambda省去了面向对象的条条框框,Lambda的标准格式由3个部分组成:
(参数类型 参数名称) -> {
代码体;
}
格式说明:
简单练习:
public class Demo1Lambda {
public static void main(String[] args) {
// 开启一个新的线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("新线程中执行的代码 :"+Thread.currentThread().getName());
}
}).start();// 不是用lambda的创建线程的写法
new Thread(() ->{ // 调用无参的方法
System.out.println("新线程中执行的代码 :"+Thread.currentThread().getName());
}).start();
System.out.println("主线程中的代码:" + Thread.currentThread().getName());
}
}
/**
* @FunctionalInterface
* 这是一个标志注解,被该注解修饰的接口只能声明一个抽象方法
* 多个会编译不通过
*/
@FunctionalInterface
public interface UserService {
void show();
}
在lambda表达式的标准写法基础上,可以使用省略写法的规则为:
接口
public interface StudentService {
String show(String name, Long id) ;
}
代码实现
public static void main(String[] args) {
goStudent((String name,Long id) ->{
return name+id;
});
// lambda简化后的代码
goStudent((String name,Long id) -> name+id+666);
}
// 自定义的方法
public static void goStudent(StudentService studentService){
System.out.println(studentService.show("张三", 22L));
}
Lambda表达式的语法是非常简洁的,但是Lambda表达式不是随便使用的,使用时有几个条件要特别注 意
Lambda和匿名内部类的对比