JDK Executor执行器的应用

JDK5 Executor执行器的应用
 
JDK5新增了一个软件包java.util.concurrent,提供了大量在并发编程中很常用的实用工具类。
 
java.util.concurrent.Executor是一个执行器。用来执行已提交的 Runnable 任务的对象。
 
Executor本身是一个接口。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。
 
通过Executor管理Thread对象,可以简化编程。
Executor在客户单和任务执行之间提供了一个中介层,通过中介来执行任务。Executor执行任务而无须管理任务的生命周期。因此,Executor是启动任务的首选方法。
 
 
在官方的API文档中给出了非常详细的应用例子。
 
java.util.concurrent.Executors工具类是创建线程池的工具类。
 
下面看看如何使用线程池通过Executor来执行多线程任务:
 
package stu.executor;

/**
* 一个实现了Runnable接口的任务
*
* @author leizhimin,2008-10-9 10:48:39
*/

public class TestTask implements Runnable {
         private String taskName;

         public TestTask(String taskName) {
                 this.taskName = taskName;
        }

         public void run() {
                 //一个比较耗时的工作
                 for ( int i = 0; i < 9999999; i++) ;
                System.out.println( "执行 " + taskName + " ,所在线程ID为:" + Thread.currentThread().getId());
        }
}
 
package stu.executor;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**
* 定时器测试
*
* @author leizhimin,2008-10-9 10:48:32
*/

public class TestExecutor {
         private Executor executor;

         /**
         * 设置执行器
         *
         * @param executor
         */

         public void setExecutor(Executor executor) {
                 this.executor = executor;
        }

         /**
         * 用执行器执行多个任务
         */

         public void executeTasks() {
                 //连续执行10个任务
                 for ( int i = 0; i < 10; i++) {
                        executor.execute( new TestTask( "任务" + i));
                }
        }

         public static void main(String[] args) {
                TestExecutor testExecutor = new TestExecutor();
                testExecutor.setExecutor(Executors.newFixedThreadPool(2));
                testExecutor.executeTasks();
        }
}
 
运行结果:
执行 任务1 ,所在线程ID为:9
执行 任务0 ,所在线程ID为:8
执行 任务2 ,所在线程ID为:9
执行 任务3 ,所在线程ID为:8
执行 任务4 ,所在线程ID为:9
执行 任务5 ,所在线程ID为:8
执行 任务6 ,所在线程ID为:9
执行 任务7 ,所在线程ID为:8
执行 任务8 ,所在线程ID为:9
执行 任务9 ,所在线程ID为:8
 
执行结果表明:在使用Executor执行多线程任务的时候,线程池的机制节省了系统资源,也加快了执行速度。但是执行完10个任务后,程序的主线程一直也没有退出,目前本人还没深入研究。有兴趣的话,各位博友可以研究研究,并发表您的观点。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值