Java多线程学习笔记— “Lambda表达式”

Posted 王祺灏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程学习笔记— “Lambda表达式”相关的知识,希望对你有一定的参考价值。

Java— “Lambda表达式”

一、Lambda表达式概念

Lambda表达式是java8中引入的新的编码方法,其质属于 “函数式编程 ” 的概念,主要目的是简化代码,与匿名内部类关系密切,可使用Lambda语法来代替匿名内部类,当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口

因此,理解函数式接口是java8 Lamdba表达式的关键所在。

1.函数式接口

定义: 任何接口,如果只包含一个抽象方法,那么他就是一个函数式接口。
(例如用于创建线程的Runnable接口,只有一个抽象方法)

class interface Runnable

	public abstract void run();
		

对于函数式接口,我们就可以用Lambda表达式来创建它的对象。

二、为什么要用Lambda表达式

  1. 避免匿名内部类定义过多;
  2. 让代码更加简洁;
  3. 除去没有意义的代码,只留下核心逻辑。

三、Lambda表达式具体用法 ★

语法格式:

(参数)->语句(方法体);

1. 不需要参数,返回值为 5
() -> 5

2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x

3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y

4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y

5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

下面是Lambda表达式使用具体实例:


  • 首先我们定义一个函数式接口——Myinterface(只有一个run方法)

  • 创建Myclass类来实现Myinterface接口

没有使用Lambda的老方法:

(我们在主函数中创建实现类对象 i,并通过i来调用run方法)

使用Lambda表达式语法后:


四、Lambda表达式简化匿名内部类


其中:
Ilike为函数式接口名
lambda为接口中唯一的抽象方法
like为实现类的对象名

五、使用Lambda表达式实现Runnable接口创建线程

传统方法:

package bookTest;

class Runnable1 implements Runnable                                                                                              
	//重写run方法
	public void run() 
		//获取此线程名称
		System.out.println("线程1:"+Thread.currentThread().getName());
	
	


public class RunnableDemo  

	public static void main(String[] args) 
		//创建对象并启动线程
		Runnable1 r1 = new Runnable1();
		Thread t1 = new Thread(r1);
		t1.start();
	


进一步简化代码(使用内部匿名类)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

package bookTest;


public class RunnableDemo  

	public static void main(String[] args) 
		//使用内部匿名类简化代码
		Thread t1 = new Thread(new Runnable() 
			//重写run方法
			public void run() 
				System.out.println("线程1:"+Thread.currentThread().getName());
				
			
		);
		t1.start();
	


再进一步简化代码(使用Lambda表达式)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

package bookTest;


public class RunnableDemo  

	public static void main(String[] args) 
		//使用Lambda简化代码
		Thread t1 = new Thread( ()->
				System.out.println("线程1:"+Thread.currentThread().getName()));
					
			t1.start();
		
	


以上是关于Java多线程学习笔记— “Lambda表达式”的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程-lambda表达式

狂神说Java笔记--多线程详解部分笔记

Java之线程池和Lambda表达式

Java学习笔记之 Lambda表达式

Java学习笔记3.9.1 Lambda表达式 - Lambda表达式入门

Java重温学习笔记,Java8新特性:Java Lambda 表达式