轻量级任务队列
来源:互联网 发布:海康威视无网络视频 编辑:程序博客网 时间:2024/05/22 02:19
public abstract class TaskQueue<T> { private Thread execThread; private List<T> queue = new LinkedList<T>(); public void addTask(T task) { queue.add(task); if (null == execThread || !execThread.isAlive()) loop(); } public void addALLTask(List<T> tasks) { queue.addAll(tasks); if (null == execThread || !execThread.isAlive()) loop(); } protected void loop() { (execThread = new Thread() { @Override public void run() { while (!queue.isEmpty()) { if (isOk(queue.get(0))) execute(queue.remove(0)); else queue.add(queue.remove(0)); } } }).start(); } protected abstract void execute(T task); public void stop(){ queue.clear(); } public void interrupt(){ execThread.interrupt(); } protected boolean isOk(T task){ return true; }}
使用示例:
public class TaskQueueTest {private TaskQueue<String> queue = new TaskQueueExample();private static String[] tasks = { "a", "b", "c", "d" };private Map<String, String> resources = new HashMap<>();public static void main(String[] args) {final TaskQueueTest test = new TaskQueueTest();for (String t : tasks)test.queue.addTask(t);new Thread() {String[] ks = new String[tasks.length];int p = 0;@Overridepublic void run() {while (check()) {double random = Math.random();String key = null;if(p != 0)key = ks[((int) (random * 1000)) % p];//保证只取ks的前p个元素elsekey = ks[0];test.resources.put(key, random + "");}}public boolean check() {boolean b = false;int i;for (i = -1,p = 0; p < tasks.length; p++) {if (!test.resources.containsKey(tasks[p])) {//i=i+1;ks[++i] = tasks[p];b = true;}}p = i;return b;}}.start();}class TaskQueueExample extends TaskQueue<String> {@Overrideprotected void execute(String task) {System.out.println("task: " + task + " resource:" + resources.get(task));}@Overrideprotected boolean isOk(String task) {return resources.containsKey(task);}}}
阅读全文
1 0
- 轻量级任务队列
- python huey 轻量级异步任务队列简介
- 轻量级任务调度中间件
- 轻量级队列工具Httpsqs
- httpsqs 轻量级消息队列
- 任务队列
- 任务队列
- 任务队列
- python任务调度轻量级框架
- mcq 轻量级的消息队列
- 轻量级消息队列服务UCMQ
- mcq 轻量级的消息队列
- mcq 轻量级的消息队列
- spring自带的轻量级定时任务
- Task一个轻量级分布式任务计算系统
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- 轻量级开源简单队列服务 HTTPSQS
- redis学习系列之——安装篇
- Java 操作字符串
- Drawable Animation
- php
- C#语法:多线程编程(Thread)
- 轻量级任务队列
- 【算法题】归并排序
- 高并发实战之幂等处理
- 常用C函数链接
- JavaScript之选择框脚本(表单脚本)
- ArcGIS Pro登录及离线授权
- hibernate-检索方式
- [048]linux常用命令总结
- Java之:强引用、弱引用、软引用、虚引用