🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 冗余的Runnable代码 ``` Runnable task = new Runnable() { @Override public void run() { System.out.println("run ... "); } }; new Thread(task).start(); ``` 代码分析 ``` 对于 Runnable 的匿名内部类用法,可以分析出几点内容: Thread 类需要 Runnable 接口作为参数,其中的抽象 run 方法是用来指定线程任务内容的核心 为了指定 run 的方法体,不得不需要 Runnable 接口的实现类; 为了省去定义一个 RunnableImpl 实现类的麻烦,不得不使用匿名内部类; 必须覆盖重写抽象 run 方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错; 而实际上,似乎只有方法体才是关键所在。 ``` ``` 传递一段代码——这才是我们真正的目的 ``` ### Lambda的更优写法 ``` (参数类型 参数名称) ‐> { 代码语句 } ``` ``` new Thread(()->System.out.println("run ... ")).start(); 前面的一对小括号即 run 方法的参数(无),代表不需要任何条件; 中间的一个箭头代表将前面的参数传递给后面的代码; 后面的输出语句即业务逻辑代码 ``` ``` 这段代码和刚才的执行效果是完全一样的,可以在1.8或更高的编译级别下通过。 从代码的语义中可以看出:我们 启动了一个线程,而线程任务的内容以一种更加简洁的形式被指定。 不再有“不得不创建接口对象”的束缚,不再有“抽象方法覆盖重写”的负担,就是这么简单! ```