目录
说明
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.效果如下