欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小知识 - Anonymous new Runnable() can be replaced with lambda more…

程序员文章站 2024-03-14 09:35:04
...

来友链呀: Roc's Blog

一直在做 Java 后端开发,很少手动的去写线程了,今天在复习 ThreadPool 的时候,发现了一个提示:

小知识 - Anonymous new Runnable() can be replaced with lambda more…

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);
}

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

小知识 - Anonymous new Runnable() can be replaced with lambda more…