Java任务队列在不断的学习中需要我们掌握很多相关的技术信息。
首先,下面我们就看看如何应用TaskQueue的具体问题。
Java任务队列需要我们详细的学习,
当然我们在不断的使用中还需要注意相关信息的学习。
下面我们就先来看看TaskQueue(任务队列)的具体应用。
下面我们就详细的学习下。
在同一时刻,可能有很多任务需要执行,
而程序在同一时刻只能执行一定数量的任务,当需要执行的任务数超过了程序所能承受的任务数时怎么办呢?这就有了先执行哪些任务,后执行哪些任务的规则。
TaskQueue类就定义了这些规则中的一种,它采用的是FIFO(先进先出,英文名是First In
First Out)的方式,也就是按照任务到达的先后顺序执行。TaskQueue类的定义。
Java任务队列代码如下:
<div class="line number19 index18 alt2"><code class="java keyword">import</code> <code class="java plain">java.util.Iterator; </code></div><div class="line number20 index19 alt1"><code class="java keyword">import</code> <code class="java plain">java.util.LinkedList; </code></div><div class="line number21 index20 alt2"><code class="java keyword">import</code> <code class="java plain">java.util.List; </code></div><div class="line number22 index21 alt1"><code class="java keyword">public</code> <code class="java keyword">class</code> <code class="java plain">TaskQueue { </code></div><div class="line number23 index22 alt2"><code class="java spaces"> </code><code class="java keyword">private</code> <code class="java plain">List<Task> queue = </code><code class="java keyword">new</code> <code class="java plain">LinkedList<Task>(); </code></div><div class="line number23 index22 alt2"><code class="java plain"> </code><code class="java comments">// 添加一项任务</code></div><div class="line number24 index23 alt1"><code class="java spaces"> </code> </div><div class="line number25 index24 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">synchronized</code> <code class="java keyword">void</code> <code class="java plain">addTask(Task task) { </code></div><div class="line number26 index25 alt1"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(task != </code><code class="java keyword">null</code><code class="java plain">) { </code></div><div class="line number27 index26 alt2"><code class="java spaces"> </code><code class="java plain">queue.add(task); </code></div><div class="line number28 index27 alt1"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number29 index28 alt2"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number29 index28 alt2"><code class="java comments">// 完成任务后将它从任务队列中删除 </code></div><div class="line number30 index29 alt1"><code class="java spaces"> </code> </div><div class="line number31 index30 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">synchronized</code> <code class="java keyword">void</code> <code class="java plain">finishTask(Task task) { </code></div><div class="line number32 index31 alt1"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(task != </code><code class="java keyword">null</code><code class="java plain">) { </code></div><div class="line number33 index32 alt2"><code class="java spaces"> </code><code class="java plain">task.setState(Task.State.FINISHED); </code></div><div class="line number34 index33 alt1"><code class="java spaces"> </code><code class="java plain">queue.remove(task); </code></div><div class="line number35 index34 alt2"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number36 index35 alt1"><code class="java spaces"> </code><code class="java plain">} </code><code class="java comments">// 取得一项待执行任务 </code></div><div class="line number37 index36 alt2"><code class="java spaces"> </code> </div><div class="line number38 index37 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">synchronized</code> <code class="java plain">Task getTask() { </code></div><div class="line number39 index38 alt2"><code class="java spaces"> </code><code class="java plain">Iterator<Task> it = queue.iterator(); </code></div><div class="line number40 index39 alt1"><code class="java spaces"> </code><code class="java plain">Task task; </code></div><div class="line number41 index40 alt2"><code class="java spaces"> </code><code class="java keyword">while</code> <code class="java plain">(it.hasNext()) { </code></div><div class="line number42 index41 alt1"><code class="java spaces"> </code><code class="java plain">task = it.next(); </code></div><div class="line number42 index41 alt1"><code class="java plain"> </code><code class="java comments">// 寻找一个新建的任务 </code></div><div class="line number43 index42 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(Task.State.NEW.equals(task.getState())) { </code></div><div class="line number43 index42 alt2"><code class="java comments">// 把任务状态置为运行中 </code></div><div class="line number44 index43 alt1"><code class="java spaces"> </code><code class="java plain">task.setState(Task.State.RUNNING); </code></div><div class="line number45 index44 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">task; </code></div><div class="line number46 index45 alt1"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number47 index46 alt2"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number48 index47 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java keyword">null</code><code class="java plain">; </code></div><div class="line number49 index48 alt2"><code class="java spaces"> </code><code class="java plain">} </code></div><div class="line number50 index49 alt1"><code class="java spaces"> </code><code class="java plain">} </code></div>