写一个基于多线程的web服务器,能提供展示图片的功能,代码如下:
接口 ThreadPool
/**
* @author chendong
* @date 2019/9/7 12:54
*/
public interface ThreadPool<Job extends Runnable> {
// 执行一个job,这个Job需要实现Runnable
void execute(Job job);
// 关闭线程池
void shutdown();
// 增加工作者线程
void addWorkers(int num);
// 减少工作者线程
void removeWorkers(int num);
// 得到正在等待执行的任务数量
int getJobSize();
}
类DefaultThreadPool
import javafx.concurrent.Worker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author chendong
* @date 2019/9/7 13:06
*/
public class DefaultThreadPool<Job extends Runnable> implements ThreadPool<Job> {
// 线程池最大限制数
private static final int MAX_WORKER_NUMBERS = 10;
// 线程池默认的数量
private static final int DEFAULT_WORKER_NUMBERS = 5;
// 线程池最小的数量
private static final int MIN_WORKER_NUMBERS = 1;
// 这是一个工作列表,将会向里面插入工作
private final LinkedList<Job> jobs = new LinkedList<Job>();
// 工作者列表
private final List<Worker> workers = Collections.synchronizedList(new ArrayList<Worker>());
// 工作者线程的数量
private int workerNum = DEFAULT_WORKER_NUMBERS;
// 线程编号的生成
private AtomicInteger threadNum = new AtomicInteger();
// 初始化线程工作者
private void initializeWorkers(int num){
for(int i = 0; i < num; i++){
Worker worker = new Worker();
workers.add(worker);
Thread thread = new Thread(worker, "ThreadPool-WOrker-" + threadNum.incrementAndGet());
thread.start();
}
}
public DefaultThreadPool(){
initializeWorkers(DEFAULT_WORKER_NUMBERS);
}
public DefaultThreadPool(int num){
workerNum = num > MAX_WORKER_NUMBERS ? MAX_WORKER_NUMBERS : num < MIN_WORKER_NUMBERS ? MIN_WORKER_NUMBERS : num;
initializeWo