java 任务队列

http://www.cnblogs.com/ligang305/archive/2012/07/31/2617519.html


Java任务队列在不断的学习中需要我们掌握很多相关的技术信息。
首先,下面我们就看看如何应用TaskQueue的具体问题。
 
Java任务队列需要我们详细的学习,
当然我们在不断的使用中还需要注意相关信息的学习。
下面我们就先来看看TaskQueue(任务队列)的具体应用。
下面我们就详细的学习下。
 
在同一时刻,可能有很多任务需要执行,
而程序在同一时刻只能执行一定数量的任务,
当需要执行的任务数超过了程序所能承受的任务数时怎么办呢?
这就有了先执行哪些任务,后执行哪些任务的规则。
 
TaskQueue类就定义了这些规则中的一种,它采用的是FIFO(先进先出,英文名是First In
First Out)的方式,也就是按照任务到达的先后顺序执行。TaskQueue类的定义。
 
Java任务队列代码如下:
 
import java.util.Iterator;  
import java.util.LinkedList; 
import java.util.List;  
public class TaskQueue { 
    private List<Task> queue = new LinkedList<Task>();   // 添加一项任务
     
    public synchronized void addTask(Task task) {  
        if (task != null) {  
            queue.add(task);  
        }  
    }   // 完成任务后将它从任务队列中删除  
     
    public synchronized void finishTask(Task task) { 
    if (task != null) {  
        task.setState(Task.State.FINISHED);  
        queue.remove(task);  
        }  
    }   // 取得一项待执行任务  
     
    public synchronized Task getTask() {  
        Iterator<Task> it = queue.iterator();  
        Task task;  
        while (it.hasNext()) {  
            task = it.next();   // 寻找一个新建的任务  
            if (Task.State.NEW.equals(task.getState())) {   // 把任务状态置为运行中  
                task.setState(Task.State.RUNNING);  
                return task;  
                }  
            }  
            return null;  
        }  
    }  
 
import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.List; 
public class TaskQueue { 
    private List<Task> queue = new LinkedList<Task>();  // 添加一项任务
    public synchronized void addTask(Task task) { 
        if (task != null) { 
            queue.add(task); 
            
        // 完成任务后将它从任务队列中删除 
     
    public synchronized void finishTask(Task task) { 
        if (task != null) { 
            task.setState(Task.State.FINISHED); 
            queue.remove(task); 
            
        // 取得一项待执行任务 
     
    public synchronized Task getTask() { 
        Iterator<Task> it = queue.iterator();
        Task task;
        while (it.hasNext()) { 
            task = it.next();  // 寻找一个新建的任务 
            if (Task.State.NEW.equals(task.getState())) {  // 把任务状态置为运行中 
                task.setState(Task.State.RUNNING); 
                return task; 
                
            
        return null
    
}

### Java 中的任务队列实现与用法 在 Java 编程中,任务队列通常用于管理线程池中的任务调度和执行。通过 `ExecutorService` 接口及其具体实现类(如 `ThreadPoolExecutor` 和 `ScheduledThreadPoolExecutor`),可以方便地创建和管理任务队列。 #### 使用 ExecutorService 创建任务队列 Java 提供了标准库来简化多线程环境下的任务管理和调度工作。下面是一个简单的例子展示如何使用 `ExecutorService` 来处理任务队列: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TaskQueueExample { public static void main(String[] args) { // 创建一个固定大小的线程池 ExecutorService executor = Executors.newFixedThreadPool(5); // 定义多个任务并提交给线程池 Runnable task1 = () -> System.out.println("Task 1 executed by " + Thread.currentThread().getName()); Runnable task2 = () -> System.out.println("Task 2 executed by " + Thread.currentThread().getName()); executor.submit(task1); executor.submit(task2); // 关闭线程池 executor.shutdown(); } } ``` 上述代码展示了如何利用 `Executors.newFixedThreadPool()` 方法创建具有固定数量线程的线程池,并向其提交可运行的任务[^3]。 #### 处理任务完成状态 当涉及到复杂的任务依赖关系或者需要确认某些任务已经完成后才能继续其他操作时,可以通过调用 `Future<?> submit(Callable<T> task)` 或者类似的 API 获取返回值以跟踪任务的状态。如果存在跨线程间错误的任务标记清除情况,则应考虑更高级别的同步机制或替代方案,比如基于 SQLite 的持久化队列支持[^1]。 对于更加精细控制的情况,还可以结合锁对象(`Lock`)以及条件变量(condition variable),就像银行账户存取款示例那样采用显式的监视器模式(monitors pattern)[^2]: ```java class Worker implements Runnable{ @Override public void run(){ try{ doWork(); }finally{ workerPool.getQueue().remove(this); // 假设有一个全局worker pool维护着当前活动工作者列表. } } private void doWork(){} } // 在适当位置初始化Worker实例并向executor service提交它们... ``` 此片段仅作为概念演示用途;实际应用需依据项目需求调整设计细节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值