一直在做 Java 后端开发,很少手动的去写线程了,今天在复习 ThreadPool 的时候,发现了一个提示:
Anonymous new Runnable() can be replaced with lambda.
匿名的创建 Runnable 可以被 Lambda 替换。那肯定要紧追 Lambda 的步伐呀。
【注】在Java 1.7或更早的jvm中不支持Lambda语法。
特意查了查官方文档,所以以后就可以这样风骚的去写:
threadPoolExecutor.execute(() -> {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
不需要 new ,不需要 run 方法,直接写 run 里面的代码,效率嗖嗖的。
所以说那么 Thread 创建匿名线程的时候,我们也可以这么写:
new Thread(() -> {
System.out.println("Hello!");
System.out.println("我是一个线程!");
}).start();
// 等同于
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello!");
System.out.println("我是一个线程!");
}
}).start();
// 如果 run() 方法里面只有一个语句,还可以这样写
new Thread( () -> System.out.println("Hello!我是一个线程!") ).start();
拓展:
在这里仅仅是匿名 Runnable 的例子,其实在开发过程中,也会有其他的匿名函数,如:
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10,
10L, TimeUnit.SECONDS, new LinkedBlockingQueue(100));
// submit 使用
Future<String> future = threadPoolExecutor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("Hello, 老王.");
return "Success";
}
});
// 等价于
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10,
10L, TimeUnit.SECONDS, new LinkedBlockingQueue(100));
// submit 使用
Future<String> future = threadPoolExecutor.submit(() -> {
System.out.println("Hello, 老王.");
return "Success";
});
当然也可以自己去实现一个匿名函数:
public class TestMain {
public static void main(String[] args) {
// 实现了一个回调函数
new TestMain().testMethod((message) -> {
System.out.println(message);
});
}
private void testMethod(TestInterface testInterface) {
testInterface.show("你好!Java!");
}
}
interface TestInterface {
//只有一个方法的时候可以,多个则不能使用 Lambda 语法。
void show(String message);
}
感谢阅读!!提前祝您新年快乐!!!