首页>java频道>java教程>正文
关于使用Java多线程实现任务分发

www.zige365.com 2010-6-7 11:57:13 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
final int READY = 0;   
  • public static final int RUNNING = 1;   
  • public static final int FINISHED = 2;   
  • private int status;   
  • //声明一个任务的自有业务含义的变量,用于标识任务   
  • private int taskId;   
  • //任务的初始化方法   
  • public Task(int taskId){   
  • this.status = READY;   
  • this.taskId = taskId;   
  • }   
  • /**   
  • * 执行任务   
  • */   
  • public void execute() {   
  • // 设置状态为运行中   
  • setStatus(Task.RUNNING);   
  • System.out.println("当前线程 ID 是:" + Thread.currentThread().getName()   
  • +" | 任务 ID 是:"+this.taskId);   
  • // 附加一个延时   
  • try {   
  • Thread.sleep(1000);   
  • catch (InterruptedException e) {   
  • e.printStackTrace();   
  • }   
  • // 执行完成,改状态为完成   
  • setStatus(FINISHED);   
  • }   
  • public void setStatus(int status) {   
  • this.status = status;   
  • }   
  • public int getTaskId() {   
  • return taskId;   
  • }   
  • }   
  • /**   
  • * 自定义的工作线程,持有分派给它执行的任务列表   
  • */   
  • class WorkThread extends Thread {   
  • //本线程待执行的任务列表,你也可以指为任务索引的起始值   
  • private List taskList = null;   
  • private int threadId;   
  • /**   
  • * 构造工作线程,为其指派任务列表,及命名线程 ID   
  • * @param taskList 欲执行的任务列表   
  • * @param threadId 线程 ID   
  • */   
  • public WorkThread(List taskList,int threadId) {   
  • this.taskList = taskList;   
  • this.threadId = threadId;   
  • }   
  • /**   
  • * 执行被指派的所有任务   
  • */   
  • public void run() {   
  • for (Task task : taskList) {   
  • task.execute();   
  • }   
  • }   
  • 执行结果如下,注意观察每个Java多线程分配到的任务数量及区间。直到所有的线程完成了所分配到的任务后程序结束:

    1. 线程 0 的任务数:22 区间[0,21]   
    2. 线程 1 的任务数:22 区间[22,43]   
    3. 线程 2 的任务数:22 区间[44,65]   
    4. 线程 3 的任务数:21 区间[66,86]   
    5. 线程 4 的任务数:21 区间[87,107]   
    6. 实际要启动的工作线程数:5   
    7. 当前线程 ID 是:Thread-0 | 任务 ID 是:0   
    8. 当前线程 ID 是:Thread-1 | 任务 ID 是:22   

      本新闻共4页,当前在第3页  1  2  3  4  

    我要投稿 新闻来源: 编辑: 作者:
    相关新闻
    Java双括弧技巧:不规范的语法
    关于Java语法技巧之双括弧初始化
    有关Java的synchronized关键字:同步机制总结
    双检测锁定(DCL)和Singleton模式的问题
    关于Smooks 1.2框架:处理XML与非XML的Java框架