「任务队列java」任务队列和消息队列在哪些业务场景用过

博主:adminadmin 2022-11-23 04:32:05 60

本篇文章给大家谈谈任务队列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的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。