Bootstrap

【lamda表达式】在多线程开发中的lamda表达书简化参数

创建线程后传Runnable参数并实现run方法,可以采用下面两种方式,效果是一样的

 Thread t1 = new Thread(new Runnable() {
        @Override
        public void run() {
            // 这里是线程应该执行的代码
            System.out.println("Hello, World!");
        }
    });

    //上面代码t1的简化写法如下  见thread2创建
    Thread thread2 = new Thread(() -> {
        System.out.println("Hello, World!");
    });

   

对于线程池中提交任务代码,也可以这样简化:可以采用下面两种方式,效果是一样的


public class ThreadPoolTest {
    //线程池
    static final ThreadPoolExecutor executor = new ThreadPoolExecutor(9, 16, 60L,
            TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), Executors.defaultThreadFactory());


    public static void main(String[] args) {
        //向线程池中提交10个任务,
        for (int i = 0; i < 4; i++) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    handle();
                }
            });

        }
    }

    private static void handle() {
    }
}

简化后:

public class ThreadPoolTest {
    //线程池
    static final ThreadPoolExecutor executor = new ThreadPoolExecutor(9, 16, 60L,
            TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), Executors.defaultThreadFactory());


    public static void main(String[] args) {
        //向线程池中提交10个任务,
        for (int i = 0; i < 4; i++) {
            executor.execute(() -> handle());

        }
    }

    private static void handle() {
    }
}

很明显其中的 executor.execute()中传的参数还是Runnable类型,只不过这个类型参数中的run方法中只有一行调用handle()方法的代码,所以简化完之后就变成了 executor.execute(() -> handle()); 这个还需要多多使用,慢慢就熟练了。

;