美文网首页
学习队列之普通队列

学习队列之普通队列

作者: thaixp | 来源:发表于2017-06-26 16:16 被阅读116次

在工作之余平时看到好的博客粗略看下之后收藏起来添加书签,但过后总是没去看,等到有需要的时候再去看估计也忘记了,这样子一遍好的博客的精髓就没有学习到,所以看到好的文章自己记录下来也是挺有必要的。

首先我们来说下普通队列,普通队列的实现主要理解三个概念:

1,任务(Task):就是你要做的事情

2,队列(Queue):存放任务的空间

3,任务执行器(TaskExecutor):从队列中取出任务来执行

那么接下来我们就实现一下普通队列的代码吧:

1)定义一个任务的接口 ITask,为什么要定义成接口呢,这是方便我们可以想做不同的事,之后只要实现了这个接口就行。

2)接下来再写一个TaskExecutor(任务执行器),用来从Queue(队列)中取出Task(任务)来执行。

这里要稍微解释下BlockingQueue.take()方法,这个方法当队列里面的item为空的时候,它会一直处于阻塞状态,当队列中进入item的时候它会立刻有一个返回值,它就和ServerSocket.accept()方法一样,所以我们把它放入一个Thread中,以免阻塞调用它的线程(android中可能是主线程)。

3)任务和任务执行器都有了,接下来我们封装一个队列,方便与管理。(任务执行器可以是多个)

4)这些都准备好了,接下来我们去实现自己的任务,举个简单的例子打印

5)接下来执行

结果:

结果按照我们所想的打印出来了

6)接下来我们开多个任务执行器来执行:

结果:

这个结果该如何解释呢?

其实可以这样说,当我们初始化了三个任务执行器的时候,第一个任务在执行器1,第二个任务在执行器2,第三个任务在执行器3,接下来当那个执行器先执行完任务的时候,队列中取出来的任务就会在那个执行器去执行,用一副图理解下

好了,普通队列的实现就写到这里了,也感觉不是那么难,

关于队列一些概念大家可以参考接下来这边文章:

Java并发编程(六)阻塞队列

本文中普通队列的实现是参考这位大神的文章,虽然代码一样但是学习到了自己记录下也是好的(希望别吐槽):

Java/Android中的优先级任务队列的实践

相关文章

  • 学习队列之普通队列

    在工作之余平时看到好的博客粗略看下之后收藏起来添加书签,但过后总是没去看,等到有需要的时候再去看估计也忘记了,这样...

  • 数据结构(三)-- 优先队列

    什么是优先队列? 我们在前几篇文章中学习过了“队列”这种数据结构。那么优先队列和普通队列有什么区别的呢?普通队列的...

  • 堆(Heap)和有优先队列(Priority Queue)

    1 优先队列(Priority Queue)优先队列与普通队列的区别:普通队列遵循先进先出的原则;优先队列的出队顺...

  • PriorityQueue

    定义优先级队列,实现了AbstractQueue 优先队列跟普通的队列不一样,普通队列是一种遵循FIFO规则的队列...

  • 数据结构 | 其三 栈和队列

    栈 java中栈继承了Vector 队列 2.1 普通队列 2.2 循环队列 2.3 优先级队列 2.4 阻塞队列...

  • 队列与循环队列

    普通队列 循环队列 普通队列会造成假溢出的问题,使用循环队列解决该问题,具体问题分析看这里[https://git...

  • RabbitMQ没有延时队列?我就教你一招,玩转延时队列

    什么是延时队列 延时队列:顾名思义,是一个用于做消息延时消费的队列。但是它也是一个普通队列,所以它具备普通队列的特...

  • RabbitMQ没有延时队列?我就教你一招,玩转延时队列

    什么是延时队列 延时队列:顾名思义,是一个用于做消息延时消费的队列。但是它也是一个普通队列,所以它具备普通队列的特...

  • 队列

    队列特性 对比队列和栈 基于数组的队列 对比队列学习循环队列 循环队列难点 阻塞队列 并发队列 应用:线程池中拒绝...

  • 堆和优先队列

    堆又称为优先队列,其通常包括至少两种操作:入队操作和出队操作。 普通队列与优先队列 普通队列:先进先出,后进后出优...

网友评论

      本文标题:学习队列之普通队列

      本文链接:https://www.haomeiwen.com/subject/aqxjcxtx.html