Lambda表达式简化线程的使用

Lambda表达式

在jdk8之后才有Lambda表达式,其作用是避免匿名内部类定义过多, 其实质属于函数式编程的概念。

从外部类到Lambda表达式

Lambda表达式的出现就是为了减少匿名内部类,下面展示从外部类到Lambda表达式的演变过程,以更好地理解Lambda表达式。

package com.sxt.thread;
/**
 * lambda推导
 * 2019/7/10	17:07
 */
public class LambdaTest {
	//静态内部类
	static class Like2 implements Ilike{

		@Override
		public void lambda() {
			// TODO Auto-generated method stub
			System.out.println("i like lambda2");
		}
		
	}
	
	public static void main(String[] args) {
		Ilike like = new Like();
		like.lambda();
		
		like = new Like2();
		like.lambda();
		
		//匿名内部类
		like = new Ilike() {
			public void lambda() {
				// TODO Auto-generated method stub
				System.out.println("i like lambda3");
			}
		};
		like.lambda();
		//局部内部类
		class Like3 implements Ilike{
			public void lambda() {
				// TODO Auto-generated method stub
				System.out.println("i like lambda4");
			}
		}
		like = new Like3();
		like.lambda();
		
		//lambda推导必须存在类型
		like = ()->{
			System.out.println("i like lambda5");
		};
		like.lambda();
	}
}

interface Ilike{
	void lambda();
}

//外部类
class Like implements Ilike{

	@Override
	public void lambda() {
		// TODO Auto-generated method stub
		System.out.println("i like lambda1");
	}
	
}

从外部类到静态内部类、局部内部类、匿名内部类、Lambda表达式,从功能实现的角度看是相同的。从编译角度看,外部类在加载程序时就编译;静态内部类不使用不编译,使用时才编译;局部内部类在调用方式时编译;匿名内部类和Lambda表达式都是在使用时才编译。与前3个类不同的是,匿名内部类和Lambda表达式必须借助接口或者父类且内部只能有一个方法。

Lambda表达式的写法

Lambda表达式+不含参数

上面展示的从外部类到Lambda表达式的演变过程中的代码即为Lambda表达式+不含参数的表示方法。

Lambda表达式+含单个参数

package com.sxt.thread;
/**
 * lambda+单个参数
 * 2019/7/10	17:12
 */
public class LambdaTest2 {
	public static void main(String[] args) {
		Ilove love = (int a)->{
			System.out.println("i like lambda --> " + a);
		};
		love.lambda(100);
		
		//简化
		love = (a)->{
			System.out.println("i like lambda --> " + a);
		};
		love.lambda(50);
		
		//简化
		love = a -> {
			System.out.println("i like lambda --> " + a);
		};
		love.lambda(10);
		
		//简化
		love = a -> System.out.println("i like lambda --> " + a);
		love.lambda(5);
	}
}

interface Ilove{
	void lambda(int a);
}

class Love implements Ilove{

	@Override
	public void lambda(int a) {
		// TODO Auto-generated method stub
		System.out.println("i like lambda --> " + a);
	}
	
}

Lambda表达式+含多个参数

package com.sxt.thread;
/**
 * lambda+多个参数
 * 2019/7/10	17:30
 */
public class LambdaTest3 {
	public static void main(String[] args) {
		IInterest interest = (int a, int b)-> {
			System.out.println("i like lambda --> " + (a + b));
		};
		interest.lambda(100, 200);
		
		interest = (a, b)-> {
			System.out.println("i like lambda --> " + (a + b));
		};
		interest.lambda(200, 200);

		interest = (a, b)-> 
		System.out.println("i like lambda --> " + (a + b));
		interest.lambda(200, 300);
	}
}

interface IInterest{
	void lambda(int a,int b);
}

class Interest implements IInterest{

	@Override
	public void lambda(int a, int b) {
		// TODO Auto-generated method stub
		System.out.println("i like lambda --> " + (a + b));
	}
}

Lambda表达式+有返回值

package com.sxt.thread;
/**
 * lambda+返回值
 * 2019/7/10	17:30
 */
public class LambdaTest3 {
	public static void main(String[] args) {
		IInterest interest = (int a, int b)-> {
			System.out.println("i like lambda --> " + (a + b));
			return a + b;
		};
		System.out.println(interest.lambda(100, 200));
		
		interest = (a, b)-> {
			System.out.println("i like lambda --> " + (a + b));
			return a + b;
		};
		System.out.println(interest.lambda(200, 200));
		
		interest = (a,b)->  a+b ;
		System.out.println(interest.lambda(100, 100));
	}
}

interface IInterest{
	int lambda(int a,int b);
}

class Interest implements IInterest{

	@Override
	public int lambda(int a, int b) {
		// TODO Auto-generated method stub
		System.out.println("i like lambda --> " + (a + b));
		return a + b;
	}
}

Lambda表达式简化线程

通过以上内容的介绍可知,Lambda表达式的作用是减少匿名内部类是使用, Lambda表达式的使用包括不含参数、含单个参数、含多个参数以及含参数带返回值。本文介绍 Lambda表达式的目的是为了简化线程,用 Lambda表达式简化线程的前提是此线程只用一次。下面给出Lambda表达式简化线程的代码示例:

package com.sxt.thread;
/**
 * lambda 简化线程(用一次)的使用
 * 2019/7/10	17:12
 */
public class LambdaTest4 {
	public static void main(String[] args) {
		new Thread(()->{
			for(int i = 0; i < 10; i++) {
				System.out.println("一边学习lambda");
			}
		}).start();
		new Thread(()->{
			for(int i = 0; i < 10; i++) {
				System.out.println("一边崩溃中");
			}
		}).start();
	}
}

此处的启动线程采用了静态代理模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值