学习队列之普通队列

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

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

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中的优先级任务队列的实践

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,850评论 1 17
  • 现在iOS的多线程方案主要有以下这几种: GCD(Grand Central Dispatch):使用dispat...
    寒光冷剑阅读 1,732评论 0 2
  • 学习多线程,转载两篇大神的帖子,留着以后回顾!第一篇:关于iOS多线程,你看我就够了 第二篇:GCD使用经验与技巧...
    John_LS阅读 658评论 0 3
  • 今天一上班就收到上面的通知,立即将你们部门的晓伟劝退。晓伟和我是半年前我们才认识的。那时候六部开仓1年多,各项数据...
    倔强一女生阅读 707评论 0 1