Java线程面试题:什么是线程池?为什么要使用线程池?

Java线程面试题:什么是线程池?为什么要使用线程池?

线程池是一组重复使用的线程,用于处理大量并发任务。通过使用线程池,可以减少线程的创建和销毁次数,提高资源的利用率,并且能够更好地管理和控制线程的数量和执行状态。下面我们使用一个例子来说明 Java 中线程池的使用:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolDemo {
    
    
    public static void main(String[] args) {
    
    
        // 创建一个可重用、固定线程数的线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        // 向线程池中添加 10 个任务
        for (int i = 0; i < 10; i++) {
    
    
            Runnable task = new Task(i);
            threadPool.execute(task);
        }

        // 禁止提交新任务,并试图终止所有正在执行的任务
        threadPool.shutdown();
        // 判断是否所有任务都已经执行完成
        while (!threadPool.isTerminated()) {
    
    
            Thread.yield();
        }
        System.out.println("All tasks are completed.");
    }
}

class Task implements Runnable {
    
    
    private int number;

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

    @Override
    public void run() {
    
    
        System.out.println("Task " + number + " is running on thread " + Thread.currentThread().getName());
        try {
    
    
            Thread.sleep(1000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("Task " + number + " is completed on thread " + Thread.currentThread().getName());
    }
}

在上面的例子中,我们首先创建了一个固定大小为 3 的线程池 threadPool,然后向线程池中添加了 10 个任务,这些任务都实现了 Runnable 接口。在每个任务执行时,输出当前任务的编号和所在线程的名称,并休眠 1s 后再输出完成信息。最后调用shutdown方法来禁止提交新任务,并试图终止所有正在执行的任务,等待所有任务执行完毕后输出 “All tasks are completed.”。

总结:线程池通过预先创建一组线程来处理大量并发的任务,可以提高资源利用率、管理和控制线程数量和执行状态,并且能够更好地应对高并发环境下的任务处理需求。

猜你喜欢

转载自blog.csdn.net/qq_51447496/article/details/131167180