`
kidult
  • 浏览: 47920 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

[实战]java回调函数

阅读更多
下面使用java回调函数来实现一个测试函数运行时间的工具类:


如果我们要测试一个类的方法的执行时间,通常我们会这样做:

java 代码
 
  1. public   class  TestObject {  
  2.     /**  
  3.      * 一个用来被测试的方法,进行了一个比较耗时的循环  
  4.      */   
  5.     public   static   void  testMethod(){  
  6.         for ( int  i= 0 ; i< 100000000 ; i++){  
  7.               
  8.         }  
  9.     }  
  10.     /**  
  11.      * 一个简单的测试方法执行时间的方法  
  12.      */   
  13.     public   void  testTime(){  
  14.         long  begin = System.currentTimeMillis(); //测试起始时间   
  15.         testMethod(); //测试方法   
  16.         long  end = System.currentTimeMillis(); //测试结束时间   
  17.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
  18.     }  
  19.       
  20.     public   static   void  main(String[] args) {  
  21.         TestObject test=new  TestObject();  
  22.         test.testTime();  
  23.     }  
  24. }  


大家看到了testTime()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:

首先定一个回调接口:

java 代码
 
  1. public   interface  CallBack {  
  2.     //执行回调操作的方法   
  3.     void  execute();  
  4. }  


然后再写一个工具类:

java 代码
 
  1. public   class  Tools {  
  2.       
  3.     /**  
  4.      * 测试函数使用时间,通过定义CallBack接口的execute方法  
  5.      * @param callBack  
  6.      */   
  7.     public   void  testTime(CallBack callBack) {  
  8.         long  begin = System.currentTimeMillis(); //测试起始时间   
  9.         callBack.execute(); ///进行回调操作   
  10.         long  end = System.currentTimeMillis(); //测试结束时间   
  11.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
  12.     }  
  13.       
  14.     public   static   void  main(String[] args) {  
  15.         Tools tool = new  Tools();  
  16.         tool.testTime(new  CallBack(){  
  17.             //定义execute方法   
  18.             public   void  execute(){  
  19.                 //这里可以加放一个或多个要测试运行时间的方法   
  20.                 TestObject.testMethod();  
  21.             }  
  22.         });  
  23.     }  
  24.       
  25. }  


大家看到,testTime()传入定义callback接口的execute()方法就可以实现回调功能

分享到:
评论
10 楼 shaoyong 2013-09-29  
佩服楼主
9 楼 lucifer833 2013-01-24  
这不是回调吧??
8 楼 michael_wong 2011-04-03  
7 楼 wangruiming 2010-11-18  
例子很经典,作者对回调理解一定很深
6 楼 agao1985 2010-01-18  
恩 终于看明白一点了 不过用代理也能实现啊
5 楼 accphc 2009-05-14  
一个很不错的回调例子!!
4 楼 samm 2008-12-12  
SO good!
3 楼 wengax 2008-11-23  
给予高度的评价!!!!!!
2 楼 keating 2008-11-06  
写得太棒了。转载一下。谢谢!
1 楼 yuechiang 2008-10-20  
very good! up

相关推荐

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 ...

    Java并发编程实战

    12.1.5 使用回调213 12.1.6 产生更多的交替操作214 12.2 性能测试215 12.2.1 在PutTakeTest中增加计时功能215 12.2.2 多种算法的比较217 12.2.3 响应性衡量218 12.3 避免性能测试的陷阱220 12.3.1 垃圾回收...

    java 8实战 清晰带书签

    许多人都熟悉事件处理器和回调函数,即注册一个对象,它包含会在事件发 生时使用的一个方法。Lambda使人更容易在Java中广泛应用这种思想。简单来说,Lambda和它 的朋友“方法引用”让你在做其他事情的过程中,可以...

    【卷一/共两卷】AJAX实战pdf高清版90M

    2.5.4 使用回调函数监视请求 2.5.5 完整的生命周期 2.6 Ajax有何不同 2.7 小结 2.8 资源 第3章 使AjaX秩序井然 3.1 从混沌到秩序 3.1.1 模式:创造通用的词汇表 3.1.2 重构与Ajax 3.1.3 保持均衡 3.1.4 重构实战 3.2...

    Hibernate实战(第2版 中文高清版)

     12.3.4 实体监听器和回调   12.4 小结   第13章 优化抓取和高速缓存   13.1 定义全局抓取计划   13.1.1 对象获取选项   13.1.2 延迟的默认抓取计划   13.1.3 理解代理   13.1.4 禁用代理生成   ...

    Spring3.x企业应用开发实战(完整版) part1

    8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...

    Spring.3.x企业应用开发实战(完整版).part2

    8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...

    Java开发技术大全 电子版

    4.10.3抽象方法与回调函数171 4.11最终类与最终方法173 4.12接口与多重继承174 4.12.1接口的定义174 4.12.2接口的继承175 4.12.3接口的实现177 4.13内部类179 4.13.1内部类的定义179 4.13.2内部类访问外部类...

    基于go语言实现的分布式缓存系统完整源码+说明(以键值对的形式存储数据).zip

    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,...用户输入查询请求后,会优先在缓存系统查询,查不到则使用回调函数去源数据库查询,再将查询结果存入缓存系统并返回给用户).zip

    【05-面向对象(下)】

    基本数据类型的包装类 •八大数据类型的包装类分别为:Byte、Short、Integer、Long、Character、 Float、Double、Boolean。...函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    11.6.4 回调机制 336 11.7 反外挂技术 338 11.7.1 防止加速器 338 11.7.2 防止分析伪造网络包 339 11.7.3 防止逆向工程 341 11.7.4 防止代码钩子 344 11.7.5 惩戒外挂作弊者 344 11.7.6 安全地将信息传递给服务器 ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    11.6.4 回调机制 336 11.7 反外挂技术 338 11.7.1 防止加速器 338 11.7.2 防止分析伪造网络包 339 11.7.3 防止逆向工程 341 11.7.4 防止代码钩子 344 11.7.5 惩戒外挂作弊者 344 11.7.6 安全地将信息传递给服务器 ...

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

Global site tag (gtag.js) - Google Analytics