public interface Itask {
void run();
}
public class MyTask implements Itask {
public MyTask () {
}
//要执行的代码逻辑
@Override
public void run() {
System.out.println("MyTask");
}
}
public class TaskExecutor extends Thread {
private BlockingQueue taskQueue;
private Boolean isRunning = true;
public TaskExecutor(BlockingQueue taskQueue) {
this.taskQueue = taskQueue;
}
// 退出。
public void quit() {
isRunning = false;
interrupt();
}
@Override
public void run() {
while (isRunning) { // 如果是执行状态就待着。
Itask iTask;
try {
iTask = (Itask) taskQueue.take(); // 下一个任务,没有就等着。
} catch (InterruptedException e) {
if (!isRunning) {
// 发生错误中断代码
interrupt();
break;
}
// 发生意外了,不是退出状态,那么窗口继续等待。
continue;
}
// 执行任务
iTask.run();
}
}
}
public class TaskQueue {
// 任务队列
private BlockingQueue mTaskQueue;
// 执行器
private TaskExecutor[] mTaskExecutors;
// 创建队列时,指定执行器数量,保证你开的多个线程是否需要等待
public TaskQueue(int size) {
mTaskQueue = new linkedBlockingQueue<>();
mTaskExecutors = new TaskExecutor[size];
}
// 开启队列。
public void start() {
stop();
for (int i = 0; i < mTaskExecutors.length; i++) {
mTaskExecutors[i] = new TaskExecutor(mTaskQueue);
mTaskExecutors[i].start();
}
}
// 关闭队列。
public void stop() {
if (mTaskExecutors != null)
for (TaskExecutor taskExecutor : mTaskExecutors) {
if (taskExecutor != null) taskExecutor.quit();
}
}
//添加任务到队列。
public int add(Itask task) {
if (!mTaskQueue.contains(task)) {
mTaskQueue.add(task);
}
// 返回队列中的任务数
return mTaskQueue.size();
}
}
public class Test{
public static void main(String[] args) {
TaskQueue tq = new TaskQueue(1);
MyTask myTask= new MyTask ();
tq.add(myTask);
tq.start();
}
}