Anonymous new Runnable() can be replaced with lambda more…

一直在做 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);
}

感谢阅读!!提前祝您新年快乐!!!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注