java队列有哪些_java队列有哪些?队列如何实现执行任务?

今天向大家介绍一下java队列有哪几种,分别适用于哪种情况,并且用实例为大家展示队列是如何执行任务的。

第一种:BlockingQueue

它有四个具体的实现类,根据不同需求,选择不同的实现类;

第二种:ArrayBlockingQueue

它是基于数组结构的有界阻塞队列,规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。它所包含的对象是以FIFO(先入先出)顺序排序的;

第三种:LinkedBlockingQueue

它是基于链表结构的阻塞队列,大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由IntegerMAX_VALUE来决定。其所含的对象是以FIFO顺序排序的,吞吐量通常要高于ArrayBlockingQueue;

第四种:PriorityBlockingQueue

它是具有优先级的无限阻塞队列,类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序;

第五种:SynchronousQueue

它不存储元素的阻塞队列,对它的操作必须是放和取交替完成的,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue;

第六种:LinkedBlockingQueue

它和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue。

下面通过一个实例来展示队列如何实现执行任务。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;

/**

* 做任2113务队列的初始化5261工作

*/

@Before

public void init()

{

// 获取4102任务运行器

taskRunner = TaskRunner.getInstance();

// 将任务运行器放入线程进行调度1653

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);

}

}

综上所述,java队列种类繁多内容丰富,因此想要熟练地应用它就需要花费更多的心思了。想要了解更多对于队列的java经典例子,敬请关注奇Q工具网。

推荐阅读:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值