定义一个线程池,2个核心,队列中最多只能存30个任务
时间: 2023-05-25 17:06:38 浏览: 114
线程池是一种管理和重复利用线程的方法,能够在多个任务之间轮流使用池中的空闲线程,从而减少系统的开销和资源浪费。对于题目要求的线程池,具体实现如下:
1. 创建两个核心线程,在池中持续运行,以便之后分配任务。
2. 创建一个任务队列,使得任务可以在队列中等待执行。任务队列应该是一个先进先出的队列,当队列中的任务被取出时,应该按照任务到达的时间进行排序。
3. 在队列中最多存储30个任务,在超过30个任务时,新的任务将不能加入队列中,而是等待队列中有空余。
4. 当线程池中的线程处于空闲状态时,线程池应该分配一个任务给该线程,以便其执行任务。如果线程池中不再有空闲线程,任务应该等待,直到有可用线程。
5. 当一个线程执行完任务时,它应该从任务队列中取出下一个任务进行执行。
6. 当线程池中的线程数超过2个核心线程时,多出来的线程应该丢弃,否则会浪费系统资源。
下面是一个简单实现的代码示例:
```
import java.util.concurrent.*;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 线程池核心线程数为2,最大线程数为2,任务队列最大存储数为30
ExecutorService pool = new ThreadPoolExecutor(2, 2, 0, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(30));
// 创建30个任务,加入任务队列
for (int i = 1; i <= 30; i++) {
final int index = i;
pool.execute(new Runnable() {
public void run() {
System.out.println("任务" + index + "开始执行");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务" + index + "执行完成");
}
});
}
// 关闭线程池
pool.shutdown();
}
}
```
在本示例中,线程池通过ThreadPoolExecutor实现,核心线程数为2,最大线程数为2,任务队列最大存储数为30。随后,创建30个任务,加入任务队列并执行。每个任务都会sleep 2s,以便在控制台中看到执行顺序。最后,调用ThreadPoolExecutor的shutdown方法关闭线程池。
阅读全文