----------记录学习-----------
package com.example.demo.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class MyExecutor {
private List<WorkThread> workThreads;
/**
* 任务队列集合
*/
private BlockingDeque<Runnable> runnableDeque;
/**
* 死循环结束控制开关
*/
private Boolean isRun = true;
/**
* 我的遗嘱执行人
*
* @param maxThreadCount 最大线程数
* @param dequenSize 工作任务队列长度
*/
public MyExecutor(int maxThreadCount, int dequenSize) {
//控制工作线程集合及任务队列大小
workThreads = new ArrayList<>(maxThreadCount);
runnableDeque = new LinkedBlockingDeque<Runnable>(dequenSize);
for (int i = 0; i < maxThreadCount; i++) {
new WorkThread().start();
}
}
class WorkThread extends Thread {
@Override
public void run() {
while (isRun || runnableDeque.size() > 0) {
//每次 执行将当前任务从队列中删除
Runnable runnable = runnableDeque.poll();
if (runnable != null) {
runnable.run();
}
}
}
}
public Boolean execute(Runnable runnable) {
//将任务放入到工作队列中 开启线程 执行任务
return runnableDeque.offer(runnable);
}
public static void main(String[] args) {
MyExecutor executor = new MyExecutor(10, Integer.MAX_VALUE);
for (int i = 0; i < 20; i++) {
int finalI = i;
executor.execute(() -> System.out.println(Thread.currentThread().getName() + "--" + finalI));
}
//任务执行完成 关闭任务
executor.isRun = false;
}
}
仅供参考~~~~~~~~~~~~~~~~~~~~~