欢迎光临散文网 会员登陆 & 注册

完整的Java线程池示例代码

2023-04-01 10:32 作者:燕洼仙草  | 我要投稿

下面是一个完整的Java线程池示例代码,包括线程池的创建、提交任务、获取任务执行结果、关闭线程池等操作:


import java.util.concurrent.*;


public class ThreadPoolExample {

    public static void main(String[] args) {

        // 创建线程池

        ExecutorService executor = Executors.newFixedThreadPool(5);


        // 提交任务

        executor.submit(new Runnable() {

            public void run() {

                System.out.println("Task 1 is running in thread " + Thread.currentThread().getName());

            }

        });


        Future<Integer> future = executor.submit(new Callable<Integer>() {

            public Integer call() throws Exception {

                System.out.println("Task 2 is running in thread " + Thread.currentThread().getName());

                return 1 + 2;

            }

        });


        // 获取任务执行结果

        try {

            Integer result = future.get();

            System.out.println("Task 2 result is " + result);

        } catch (InterruptedException | ExecutionException e) {

            e.printStackTrace();

        }


        // 关闭线程池

        executor.shutdown();

    }

}


上述代码创建了一个大小为5的固定线程池,然后向线程池提交了两个任务,一个是实现了Runnable接口的匿名类,另一个是实现了Callable接口的匿名类。接着使用Future接口获取了Callable任务的执行结果,并打印输出结果。最后关闭了线程池。

怎么等待线程都执行完

可以使用Java中的CountDownLatch类来等待线程都执行完毕。

CountDownLatch是一个同步工具类,它可以让某个线程等待直到倒计时结束,再开始执行。在创建CountDownLatch时,需要传入一个倒计时的计数器,调用CountDownLatch的countDown()方法可以将计数器减1,调用await()方法可以让当前线程等待,直到计数器变为0才会继续执行。

以下是一个示例代码,展示了如何使用CountDownLatch等待多个线程都执行完毕:


import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;


public class WaitThreadExample {

    public static void main(String[] args) {

        int nThreads = 5;

        CountDownLatch latch = new CountDownLatch(nThreads);

        ExecutorService executor = Executors.newFixedThreadPool(nThreads);


        for (int i = 0; i < nThreads; i++) {

            executor.submit(new Runnable() {

                public void run() {

                    // 线程执行任务

                    System.out.println("Thread " + Thread.currentThread().getName() + " is running");

                    // 计数器减1

                    latch.countDown();

                }

            });

        }


        // 等待所有线程执行完毕

        try {

            latch.await();

        } catch (InterruptedException e) {

            e.printStackTrace();

        }


        // 关闭线程池

        executor.shutdown();

        System.out.println("All threads have finished executing");

    }

}


上述代码创建了一个大小为5的固定线程池,并向线程池提交了5个任务。每个任务在执行完毕后,都会将计数器减1。最后使用CountDownLatch的await()方法等待计数器变为0,即所有任务都执行完毕。当计数器为0时,会输出"All threads have finished executing"。最后关闭了线程池。


完整的Java线程池示例代码的评论 (共 条)

分享到微博请遵守国家法律