java中创建线程池有哪几种方式呢?

乔欣 Java面经 发布时间:2022-11-13 22:22:49 阅读数:17855 1 并发编程面试题(2023最新版)
下文笔者讲述使用java代码创建线程池的方法分享,如下所示
实现思路:
     方式1:使用Executors工具类创建线程池
     方式2:使用ThreadPoolExecutor构造函数创建线程池
例:
使用 Executors 工具类创建线程池
Executors提供了一系列工厂方法用于创先线程池
返回的线程池都实现了ExecutorService接口
主要有newSingleThreadExecutor,newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool
public class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " run()方法执行中...");
    }

}
public class SingleThreadExecutorTest {

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        MyRunnable runnableTest = new MyRunnable();
        for (int i = 0; i < 5; i++) {
            executorService.execute(runnableTest);
        }

        System.out.println("线程任务开始执行");
        executorService.shutdown();
    }

}
运行以上代码,将输出以下信息
线程任务开始执行
pool-1-thread-1 is running...
pool-1-thread-1 is running...
pool-1-thread-1 is running...
pool-1-thread-1 is running...
pool-1-thread-1 is running...

使用ThreadPoolExecutor构造函数创建线程池

public class Task implements Runnable {

    private int taskNum;

    public Task(int taskNum) {
        this.taskNum = taskNum;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " 正在执行task " + taskNum);
        try {
            Thread.sleep(4000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " task " + taskNum + "执行完毕");
    }

}
public class ThreadPoolExecutorTest {

    public static void main(String[] args) {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 5, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(5));

        for (int i = 0; i < 5; i++) {
            Task task = new Task(i);
            threadPoolExecutor.execute(task);

            System.out.println(Thread.currentThread().getName() + " 线程池中线程数目:" + threadPoolExecutor.getPoolSize() + ",队列中等待执行的任务数目:" +
                    threadPoolExecutor.getQueue().size() + ",已执行完的任务数目:" + threadPoolExecutor.getCompletedTaskCount());
        }

        threadPoolExecutor.shutdown();
    }

}
运行以上代码,将输出以下信息----
pool-1-thread-1 正在执行task 0
main 线程池中线程数目:1,队列中等待执行的任务数目:0,已执行完的任务数目:0
main 线程池中线程数目:2,队列中等待执行的任务数目:0,已执行完的任务数目:0
main 线程池中线程数目:2,队列中等待执行的任务数目:1,已执行完的任务数目:0
main 线程池中线程数目:2,队列中等待执行的任务数目:2,已执行完的任务数目:0
pool-1-thread-2 正在执行task 1
main 线程池中线程数目:2,队列中等待执行的任务数目:3,已执行完的任务数目:0
pool-1-thread-1 task 0执行完毕
pool-1-thread-2 task 1执行完毕
pool-1-thread-1 正在执行task 2
pool-1-thread-2 正在执行task 3
pool-1-thread-2 task 3执行完毕
pool-1-thread-2 正在执行task 4
pool-1-thread-1 task 2执行完毕
pool-1-thread-2 task 4执行完毕
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16683497364898.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者