目录
说明
1.线程池特点
2.线程池的简单示例
2.1 定义一个线程池类,通过创建一个全局的阻塞队列接收任务,线程池类构造方法拿阻塞队列的线程,完成线程的执行。
3. main方法中调用该类,实现线程池的调用
4.效果如下
说明
线程池是为了管理线程对象而诞生的,具备了对线程进行复用的功能,大大提高了多线程的工作效率,减少线程频繁创建带来不必要的开销,提高了系统的相应速度和吞吐量。
1.线程池特点
线程池具有复用性、并发执行、任务管理、资源限制等特点。
复用性:对线程进行复用减少线程的创建和销毁。
并发执行:可以多任务并发执行,提高cpu的利用率。
任务管理:提供了任务提交、任务取消、任务执行结果获取等功能
资源限制:严格控制线程池中的线程数量,避免线程过多导致系统资源耗尽
2.线程池的简单示例
2.1 定义一个线程池类,通过创建一个全局的阻塞队列接收任务,线程池类构造方法拿阻塞队列的线程,完成线程的执行。
package com.example.spring.mono.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class MyThreadPool {
    //阻塞队列
    private BlockingQueue<Runnable> blockingDeque;
    public MyThreadPool(int threadNums){
        this.blockingDeque = new ArrayBlockingQueue<>(1000);
        for (int i = 0;i<threadNums;i++){
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true){
                        try {
                            Runnable top = blockingDeque.take();
                            top.run();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            });
            t.start();
        }
    }
    public void submit(Runnable runnable){
        try {
            this.blockingDeque.put(runnable);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
3. main方法中调用该类,实现线程池的调用
package com.example.spring.mono.thread;
public class ThreadTest {
    public static void main(String args[]){
        MyThreadPool myThreadPool = new MyThreadPool(60);
        for (int i =0;i<60;i++){
            final int taskIndex = i; // 捕获当前循环的 i 值
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    System.out.println("我是任务" + taskIndex); // 使用捕获的 taskIndex
                }
            };
            myThreadPool.submit(task);
        }
    }
}
4.效果如下




















