借多线程初识lambda表达式
lambda表达式,作为Java8中的新特性,可以极大地简化原本复杂的代码,再加上其接近自然语言,比较容易理解。(来自百度,容易理解这点实在不敢恭维)
作为一个Java初学小菜鸟,第一次接触lambda是在《Java核心技术卷I》里面,当初可谓一脸懵逼,根本不知道从何入手。借着这次对多线程的学习,对lambda也开始有一定的了解,赶紧做点自己的小笔记。
面向对象和函数式
要理解lambda表达式,首先要了解函数式编程。Java是一门面向对象的语言,因此我们遇到问题时第一时间想到的就是需要合适的对象,利用他们其中合适的方法来解决。而所谓函数式编程,则是避免使用依赖程序状态和对象的方法来解决问题,个人理解是,类似于数学的函数,不管什么情况下,都只要代入数据计算就好。函数式编程往往会忽略面向对象的复杂语法,强调的是做什么,而不是以什么形式去做。
冗余的Runnable代码
要建立多线程,我们可以先写一个实现了Runnable接口的实现类,覆盖其run方法,然后创建线程类并传入Runnable类的实例,利用start方法开启多线程。
//实现了Runnable接口并覆盖其方法的实现类
public class Runnable01 implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName()+"建立了新线程");
}
}
//创建新线程并传入该类实例
public class DemoRunnable {
public static void main(String[] args) {
//创建Runnable接口的实现类对象
Runnable01 r=new Runnable01();
//创建新线程,传入Runnable接口的实现类
Thread t=new Thread(r);
//调用start方法开启新线程,实现新方法
t.start();
}
代码的简化
这时候我们可以看到,创建一个新线程的代码还是比较复杂的,需要我们去创建实现两个类,那有没有办法减少我们的工作量呢?答案是使用匿名内部类。直接在新建立的线程中传入Runnable接口并覆盖run方法,并以start方法来启动多线程。
//使用匿名内部类的方法,实现多线程
new Thread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName()+"建立了新线程");
}
}).start();;
其实还有更简便的方法,就是使用Lambda表达式来实现。在这里,新建线程括号中的小括号,代表着run方法,如果该方法有参数,我们就要在这个小括号里面加上参数,箭头的含义是把前面小括号里的参数传到后面大括号的数据里去,而大括号中的代码,其实就是run方法的主体。
//使用lambda表达式
new Thread(()-> {
System.out.println(Thread.currentThread().getName()+"建立了新线程");
}).start();;
总结
刚开始接触Lambda表达式,总会不可避免地懵圈,关键在于,如何转变你的编程思想,由面向对象转向函数式编程,这两种编程思想有着各自的优劣,我们应该取其精华,用最简单的方式来解决问题。lambda表达式作为Java1.8的新特性,有利于减少我们代码的冗余度,也增加了代码的可读性,我们应当好好掌握。以上是在B站观看黑马视频有感。
如果以上感想中有什么不当之处,还望各位不吝指出,多谢!