public class MyExecutors {
/**
* 缓存并发任务队列
*/
private LinkedBlockingDeque<Runnable> threadDeque;
/**
* 控制任务是否继续执行
*/
private Boolean flag = true;
/**
* 构造方法
*
* @param coreThreads 核心线程数
* @param dequeSize 缓存并发队列大小
*/
private MyExecutors(int coreThreads, int dequeSize) {
//创建缓存并发队列
threadDeque = new LinkedBlockingDeque<>(dequeSize);
//创建核心线程数数量的线程并处于运行状态
for (int i = 0; i < coreThreads; i++) {
new TaskThread().start();
}
}
/**
* 任务线程
*/
class TaskThread extends Thread {
@Override
public void run() {
//死循环实现一直处于运行状态的线程
while (flag || threadDeque.size() > 0) {
Runnable runnable = threadDeque.poll();
if (Objects.nonNull(runnable)) {
runnable.run();
}
}
}
}
private void execute(Runnable runnable) {
threadDeque.offer(runnable);
}
public static void main(String[] args) {
MyExecutors myExecutors = new MyExecutors(2, 10);
for (int i = 0; i < 10; i++) {
int finalI = i;
myExecutors.execute(() ->
System.out.println(Thread.currentThread().getName() + ":" + finalI));
}
myExecutors.flag = false;
}
}
手写线程池
最新推荐文章于 2024-08-15 14:47:41 发布