Java线程池入门01

发布于:2025-02-26 ⋅ 阅读:(90) ⋅ 点赞:(0)

1. 为什么要使用线程池


来看一个常规的应用场景,假如有三个相同的任务需要执行,那么你必须得创建三个线程来执行这三个任务。
线程是不能复用的。

package LearnThreadPool;  
  
import java.util.stream.IntStream;  
  
/**  
 * 简单使用线程池  
 *  
 * @author cat  
 * @version 2025/2/24 16:08  
 * @since JDK17  
 */  
public class UseThreadPool {  
    public static void m() {  
        System.out.println(Thread.currentThread().getName());  
    }  
    public static void main(String[] args) {  
        IntStream.range(0, 3).mapToObj(i -> (new Thread(UseThreadPool::m, "Thread-" + (i + 1)))).forEach(Thread::start);  
        }  
}
输出 : 
Thread-1
Thread-2
Thread-3

但如果你使用线程池的话,则不需要创建三个线程。

package LearnThreadPool;  
  
import Chapter07.ThreadPool;  
  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
import java.util.concurrent.ThreadPoolExecutor;  
import java.util.stream.IntStream;  
  
/**  
 * 简单使用线程池  
 *  
 * @author cat  
 * @version 2025/2/24 16:08  
 * @since JDK17  
 */  
public class UseThreadPool {  
    public static void m() {  
        System.out.println(Thread.currentThread().getName());  
    }  
    public static void main(String[] args) {  
        // 创建一个只有一个线程的线程池  
        ExecutorService threadPool = Executors.newSingleThreadScheduledExecutor();  
        IntStream.range(0, 3).forEach(i -> threadPool.execute(UseThreadPool::m));  
        // 关闭线程池  
        threadPool.shutdown();  
    }  
}
输出 : 
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1

此时输出的三个线程的名称是一样的,这说明一个线程执行了三个任务,即实现了线程的复用。

2. 线程池的好处


  • 降低资源消耗 : 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度 : 当有任务时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性 : 线程池可以进行统一的分配,调优和监控。

3. 什么是线程池


线程池是一种池化思想管理线程的工具。
![[Pasted image 20250224190049.png]]
在这里插入图片描述