Java 多线程 -- lambda 表达式推导

jdk 8 开始 java 引入了lambda 表达式。
lambda适用场景:
1、接口或父类
2、接口或父类只有一个方法

我们从多线程写法来推导一下:

1、外部类写法:

package com.xzlf.thread;
/**
 * Lambda 表达式推导一:外部类
 * @author xzlf
 *
 */
public class LambdaTest01 {
	public static void main(String[] args) {
		ThreadA ta = new ThreadA();
		new Thread(ta).start();
	}
}

	
class ThreadA implements Runnable{
	
	@Override
	public void run() {
		System.out.println("外部类");
	}
}

运行结果:
在这里插入图片描述

2、静态内部类写:

package com.xzlf.thread;
/**
 * Lambda 表达式推导二: 静态内部类
 * @author xzlf
 *
 */
public class LambdaTest02 {
	public static void main(String[] args) {
		ThreadA ta = new ThreadA();
		new Thread(ta).start();
	}
	
	static class ThreadA implements Runnable{
		
		@Override
		public void run() {
			System.out.println("静态内部类");
		}
	}
}

运行结果:
在这里插入图片描述

3、局部内部类写法:

package com.xzlf.thread;
/**
 * Lambda 表达式推导三:局部内部类
 * @author xzlf
 *
 */
public class LambdaTest03 {
	public static void main(String[] args) {
		class ThreadA implements Runnable{
			
			@Override
			public void run() {
				System.out.println("静态内部类");
			}
		}
		
		ThreadA ta = new ThreadA();
		new Thread(ta).start();
	}
	
	
}

运行结果:
在这里插入图片描述

4、匿名内部类写法:

package com.xzlf.thread;
/**
 * Lambda 表达式推导四:匿名内部类
 * @author xzlf
 *
 */
public class LambdaTest04 {
	public static void main(String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("匿名内部类");
			}
		}).start();
	}
}

运行结果:
在这里插入图片描述

5、lambda表达式:省略接口名 和 方法名

package com.xzlf.thread;
/**
 * Lambda 表达式推导五:lambda 表达式 :省略接口名 和 方法名
 * @author xzlf
 *
 */
public class LambdaTest06 {
	public static void main(String[] args) {
		new Thread(() -> {
				System.out.println("匿名内部类");
		}).start();
	}
}

运行结果:
在这里插入图片描述

6、lambda表达式 :省略大括号(方法内只有一行代码):

package com.xzlf.thread;
/**
 * Lambda 表达式推导六:lambda 表达式 :省略大括号
 * @author xzlf
 *
 */
public class LambdaTest05 {
	public static void main(String[] args) {
		new Thread(() -> System.out.println("lambda 简化")).start();
	}
}

运行结果:
在这里插入图片描述

7、lambda表达式带参数写法:

package com.xzlf.thread;
/**
 * Lambda 表达式推导七:lambda 表达式 :省略接口名 和 方法名
 * @author xzlf
 *
 */
public class LambdaTest07 {
	public static void main(String[] args) {
		ILike like = (String name) -> {
			System.out.println("i like " + name);
			};
		like.like("lambda");	
	}
}

interface ILike{
	void like(String name);
}
	

运行结果:
在这里插入图片描述

8、lambda表达式带参数简化写法:

方法只有一个lambda会自动匹配参数类型,可以省略参数类型和大括号:

public class LambdaTest07 {
	public static void main(String[] args) {
		ILike like = (name) -> System.out.println("i like " + name);
			
		like.like("lambda");	
	}
}

interface ILike{
	void like(String name);
}

运行结果:

在这里插入图片描述

9、lambda表达式带参数和返回值写法:

一样的,方法只有一个,且方法内只有一条语句时,可以省略参数类型和大括号以及 return 关键字;

public class LambdaTest07 {
	public static void main(String[] args) {
		Count c = (a, b) -> a + b;
		int sum = c.add(10, 20);
		System.out.println(sum);
			
		
	}
}

interface Count{
	int add(int a, int b);
}

运行结果:
在这里插入图片描述

posted @ 2020-03-30 03:36  行者老夫  阅读(2477)  评论(0编辑  收藏  举报