本篇继续借用之前的代码,探究线程简化的方法,最终推出Lambda表达式简化方法的具体使用。
方法一:静态内部类
static class Test1 implements Runnable{
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边听歌");
}
}
}
方法二:局部内部类
public static void main(String[] args) {
class Test2 implements Runnable{
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边coding");
}
}
}
new Thread(new Test2()).start();
}
方法三:匿名内部类
必须借助接口或者父类(带上实现体)
public static void main(String[] args) {
new Thread(new Runnable(){
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边读书");
}
}
}).start();
}
方法四:Lambda
JDK8简化 lambda:内部只能推导一个方法
public static void main(String[] args) {
new Thread(()->{
for(int i=0;i<20;i++){
System.out.println("一边唱歌");
}
}
).start();
}
总结
Lambda表达式:
- 是为了避免匿名内部类定义过多
- 也为了简化线程(用一次)的使用
- 其实质属于函数式编程的概念
若实现体很简单,只有一行代码,可以去掉花括号。
只用一次的类可以变为内部类,不会随着程序的加载而加载和编译,只有使用到外部类时才加载。
其他的lambda简化:可以简化参数类型关键字、只有一个参数值可以简化小括号、只有一行代码时简化return关键字等内容。
附完整代码
public class LambdaThread{
//静态内部类
static class Test implements Runnable{
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边听歌");
}
}
}
public static void main(String[] args) {
new Thread(new Test()).start();
//局部内部类
class Test2 implements Runnable{
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边coding");
}
}
}
new Thread(new Test2()).start();
//匿名内部类,必须借助接口或者父类(带上实现体)
new Thread(new Runnable(){
public void run(){
for(int i=0;i<20;i++){
System.out.println("一边读书");
}
}
}).start();
//JDK8简化 lambda:内部只能推导一个方法
new Thread(()->{
for(int i=0;i<20;i++){
System.out.println("一边唱歌");
}
}
).start();
//若实现体很简单,只有一行代码,可以去掉花括号。
//其他的lambda简化,可以简化参数类型关键字、只有一个参数值可以简化小括号、只有一行代码时简化return关键字等
}
}