java 任务队列

原创 2015年07月09日 09:26:10
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>

事件循环和任务队列

事件循环: 调用栈执行完 ->  任务队列 (所有微观任务 -> 1个宏观任务 -> 所有微观任务 -> 1 个宏观任务 。。。。。。) 任务队列: setTimeout ajax 之类的都属于宏观任...
  • YufJi
  • YufJi
  • 2017年11月02日 18:20
  • 101

定时任务 + queue队列处理

package poseidon.web.muses.db; import org.slf4j.Logger; import org.slf4j.LoggerFactory; impor...
  • hulufeng1203
  • hulufeng1203
  • 2016年09月13日 08:50
  • 2454

最精简的java 线程池与任务队列

import java.util.*;      public class WorkQueue {       private final int nThreads;// 线程池的大小    ...
  • u012572955
  • u012572955
  • 2015年08月10日 09:39
  • 1439

Java线程实现Redis任务队列(生产者消费者)

注:接上篇IDEA整合Redis,本篇实现Redis的任务队列,Redis连接池具体配置看上篇。 一:写一个Jedis的工具类JedisUtil,将Jedis中的部分方法实现,代码如下: packa...
  • B_TAEYANG
  • B_TAEYANG
  • 2016年10月20日 15:11
  • 3421

基于任务队列的多线程

前传: 接到一个新任务,就是pdf文件上传后要转成图片 思路很简单   伪代码:           //获取上传文件         Filefile=newFile(“路径”); ...
  • cyp900509
  • cyp900509
  • 2014年11月10日 15:55
  • 410

java多线程和队列实例

java多线程和队列实例
  • cai_chinasoft
  • cai_chinasoft
  • 2016年06月02日 13:54
  • 12809

Android后台任务队列类库

github地址:https://github.com/path/android-priority-jobqueue
  • syc434432458
  • syc434432458
  • 2016年02月16日 14:43
  • 741

单线程任务队列

下边代码解决了 避免创建新线程 规避了线程池的创建过多线程 解决浪费资源问题   using System; using System.Collections.Generic; using Syst...
  • dulei123321
  • dulei123321
  • 2014年10月31日 15:50
  • 1461

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

本篇文章适用于Java和Android开发者,会从实现一个最简单的队列过渡到实现一个带有优先级的队列,使用生活中最常见的的例子结合讲解,保准你可以掌握基本的队列原理。...
  • yanzhenjie1003
  • yanzhenjie1003
  • 2017年05月12日 22:18
  • 91937

js任务队列

setTimeout和任务对列的联系,单线程优点,性能优化; 一、诡异的SETTIMEOUTsetTimeout(code, ms)函数是指在指定的毫秒数(ms)后调用函数或执行代码块,并返回一个整...
  • github_38861674
  • github_38861674
  • 2017年05月22日 13:24
  • 552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 任务队列
举报原因:
原因补充:

(最多只允许输入30个字)