栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot添加task异步任务队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot添加task异步任务队列

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();
  
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号