execute
把一个任务加到线程池中
public void execute(Runnable command) throws InterruptedException {
// 使用 延时加载 的方式来创建线程
// 当线程池中的线程数量少于阈值,则创建新线程执行该任务
// 否则添加进队列,等待其他线程结束之前的任务再执行该任务
if(pool.size() < MAX_WORKER_COUNT){
// 创建新线程
Worker worker = new Worker(queue);
// 执行任务
worker.start();
// 将 worker 添加到 线程池中
pool.add(worker);
}
queue.put(command);
}
shutdown
销毁线程池中的所有线程
调用每个线程的interrupt方法,使线程中断;调用 interrupt 后,每个线程并不是立即结束,而是可能等待一段时间,所以需要再使用 join 方法,来等待每个线程都执行结束
第一个循环触发异常,终止线程
第二个是等待每个线程结束
public void shutdown() throws InterruptedException {
// 终止掉所有的线程
for(Worker worker : pool){