「任务队列java」任务队列和消息队列在哪些业务场景用过
本篇文章给大家谈谈任务队列java,以及任务队列和消息队列在哪些业务场景用过对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Java的任务队列在哪些应用场景用过?
线程,我们有一个需求,是把数据推送到别的系统。因为推送的时候不知道对面啥子情况。我们也希望早点推完。就用任务队列。起线程。还有就是加锁,同步处理的时候用队列防止并发。场景很多,看情况吧。
java中如何实现按队列执行任务
package com.tone.example;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.tone.task.TaskProperty;
import com.tone.task.TaskSignature;
import com.tone.task.impl.BasicTask;
import com.tone.task.runner.TaskRunner;
/**
* 任务队列示例程序
* @author zlf
*/
public class TaskExample {
private TaskRunner taskRunner;
/**
* 做任务队列的初始化工作
*/
@Before
public void init() {
// 获取任务运行器
taskRunner = TaskRunner.getInstance();
// 将任务运行器放入线程进行调度
Thread thread = new Thread(taskRunner);
thread.start();
}
/**
* 等待任务执行完成,并做最后的退出工作
*/
@After
public void exit() throws InterruptedException {
Thread.sleep(600);
System.exit(0);
}
/**
* 最简单的任务运行示例
*/
@Test
public void example1() {
// 添加任务到任务运行器
taskRunner.addTask(new BasicTask() {
@Override
public void run() {
System.out.println("This is running in task runner thread, and thread is " + Thread.currentThread());
}
});
}
/**
* 加入优先执行顺序的任务运行器
*/
@Test
public void example2() {
// 添加任务到任务运行器
taskRunner.addTask(new BasicTask(0) {
@Override
public void run() {
System.out.println("This is a normal task");
}
});
taskRunner.addTask(new BasicTask(-1) {
@Override
public void run() {
System.out.println("This is a task a bit high than normal");
}
});
}
/**
* 重复添加的任务只会运行第一个
*/
@Test
public void example3() {
// 添加任务到任务运行器
taskRunner.addTask(new BasicTask(TaskSignature.ONE) {
@Override
public void run() {
System.out.println("This is task one");
}
}, TaskProperty.NOT_REPEAT);
taskRunner.addTask(new BasicTask(TaskSignature.ONE) {
@Override
public void run() {
System.out.println("This is also task one");
}
}, TaskProperty.NOT_REPEAT);
}
/**
* 重复添加的任务只会运行最后一个
*/
@Test
public void example4() {
// 添加任务到任务运行器
taskRunner.addTask(new BasicTask(TaskSignature.ONE) {
@Override
public void run() {
System.out.println("This is task one");
}
}, TaskProperty.NOT_REPEAT_OVERRIDE);
taskRunner.addTask(new BasicTask(TaskSignature.ONE) {
@Override
public void run() {
System.out.println("This is also task one");
}
}, TaskProperty.NOT_REPEAT_OVERRIDE);
}
}
javaweb任务列队怎么做
1.在同一时刻,可能有很多任务需要执行,
而程序在同一时刻只能执行一定数量的任务,
当需要执行的任务数超过了程序所能承受的任务数时怎么办呢?
这就有了先执行哪些任务,后执行哪些任务的规则。
2.TaskQueue类就定义了这些规则中的一种,它采用的是FIFO(先进先出,英文名是First
In
First
Out)的方式,也就是按照任务到达的先后顺序执行。TaskQueue类的定义。
Java任务队列代码如下:
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TaskQueue
{
private ListTask
queue = new LinkedListTask();
//
添加一项任务
public synchronized void addTask(Task
task) {
if (task
!= null)
{
queue.add(task);
}
}
//
完成任务后将它从任务队列中删除
public synchronized void finishTask(Task
task) {
if (task
!= null)
{
task.setState(Task.State.FINISHED);
queue.remove(task);
}
}
//
取得一项待执行任务
public synchronized Task
getTask() {
IteratorTask
it = queue.iterator();
Task
task;
while (it.hasNext())
{
task
= it.next(); //
寻找一个新建的任务
if (Task.State.NEW.equals(task.getState()))
{ //
把任务状态置为运行中
task.setState(Task.State.RUNNING);
return task;
}
}
return null;
}
}
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TaskQueue
{
private ListTask
queue = new LinkedListTask();
//
添加一项任务
public synchronized void addTask(Task
task) {
if (task
!= null)
{
queue.add(task);
}
}
//
完成任务后将它从任务队列中删除
public synchronized void finishTask(Task
task) {
if (task
!= null)
{
task.setState(Task.State.FINISHED);
queue.remove(task);
}
}
//
取得一项待执行任务
public synchronized Task
getTask() {
IteratorTask
it = queue.iterator();
Task
task;
while (it.hasNext())
{
task
= it.next(); //
寻找一个新建的任务
if (Task.State.NEW.equals(task.getState()))
{ //
把任务状态置为运行中
task.setState(Task.State.RUNNING);
return task;
}
}
return null;
}
}
任务队列java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于任务队列和消息队列在哪些业务场景用过、任务队列java的信息别忘了在本站进行查找喔。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。