在工作之余平时看到好的博客粗略看下之后收藏起来添加书签,但过后总是没去看,等到有需要的时候再去看估计也忘记了,这样子一遍好的博客的精髓就没有学习到,所以看到好的文章自己记录下来也是挺有必要的。
首先我们来说下普通队列,普通队列的实现主要理解三个概念:
1,任务(Task):就是你要做的事情
2,队列(Queue):存放任务的空间
3,任务执行器(TaskExecutor):从队列中取出任务来执行
那么接下来我们就实现一下普通队列的代码吧:
1)定义一个任务的接口 ITask,为什么要定义成接口呢,这是方便我们可以想做不同的事,之后只要实现了这个接口就行。

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


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


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

5)接下来执行

结果:

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

结果:

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

好了,普通队列的实现就写到这里了,也感觉不是那么难,
关于队列一些概念大家可以参考接下来这边文章:
本文中普通队列的实现是参考这位大神的文章,虽然代码一样但是学习到了自己记录下也是好的(希望别吐槽):
网友评论