Java 基础之CallBack的使用
2016-01-18 21:10
465 查看
在很多情况我们都会希望这样一个过 程,在我们执行某个任务之后,我们都能得到一个返回值,便于我们任务后的处理;比如线程,我们new thread,自然希望得到thread执行后的结果并做一些处理。
我们实现线程两个,一个extends Thread(); 另一个implements
Runnable(),但这两个方法都有一个致命的缺陷就是取不到返回值;通常我们是通过使用共享变量(static变量)
线程见的通信来实现的如android handler 广播(Broadcast);
fulturetask 用来执行java超时操作 这是可以去做其他事情,过一段时间回来取得执行结果
当然我们也可以试着自己写一个callBack,通过匿名类,接口来实现
我们实现线程两个,一个extends Thread(); 另一个implements
Runnable(),但这两个方法都有一个致命的缺陷就是取不到返回值;通常我们是通过使用共享变量(static变量)
线程见的通信来实现的如android handler 广播(Broadcast);
fulturetask 用来执行java超时操作 这是可以去做其他事情,过一段时间回来取得执行结果
/** * Created by jiangph on 16-1-10. */ public class fultureTaskDemo { /*** * 我们传统上实现线程的两个方法,一个是继承Thread类;另一个是实现runnable接口 * 但是这两个方法都有致命的:就是取不到返回值;通常我们是通过使用共享变量(static变量) 线程见的通信来实现的如android handler 广播(Broadcast) * fulturetask 用来执行java超时操作 这是可以去做其他事情,过一段时间回来取得执行结果 */ /*** * fulture主要是来执行耗时的操作,同步下的异步操作 * */ public static void main(String[]args) { fultureTaskDemo fulturedemo=new fultureTaskDemo(); //初始化一个callable对象和fulturetask对象 Callable pAccount=fulturedemo.new PrivateAccount(); FutureTask futureTask=new FutureTask(pAccount); //使用fulturetask创建一个线程 Thread pAccountThread=new Thread(futureTask); System.out.println("fulturetask线程现在开始启动,启动时间为:"+System.nanoTime()); pAccountThread.start(); System.out.println("主线成开始执行其他人物"); //从其他账户获取总及呢 int totalMoney=new Random().nextInt(100000); System.out.println("现在你在其他账户中的总金额为" + totalMoney); System.out.println("等待私有账户总金额统计完毕..."); while (!futureTask.isDone()){ try { Thread.sleep(500); System.out.println("私有账户计算为完成继续等待..."); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("futureTask线程计算完毕,此时时间为" + System.nanoTime()); Integer privateAccountMoney=null; try{ privateAccountMoney=(Integer)futureTask.get(); }catch (InterruptedException e) { e.printStackTrace(); }catch (ExecutionException e) { e.printStackTrace(); } System.out.println("您现在的总金额为:" + totalMoney + privateAccountMoney.intValue()); } @SuppressWarnings("all") class PrivateAccount implements Callable{ Integer totalMoney; @Override public Object call() throws Exception { Thread.sleep(5000); totalMoney=new Integer(new Random().nextInt(10000)); System.out.println("您当前有" + totalMoney + "在您的私有账户中"); return totalMoney; } } }
当然我们也可以试着自己写一个callBack,通过匿名类,接口来实现
package CallBack; /** * Created by jiangph on 16-1-18. */ public class TestCallBack { public static void main(String[]args) { new TestCallBackDao().useCallBack(new CallBackInterface() { @Override public void onCallBack() { System.out.println("1"); } }); } } //定义一个业务处理类 class TestCallBackDao{ public void useCallBack(CallBackInterface callBackInterface) { //调用接口方法 callBackInterface.onCallBack(); } } interface CallBackInterface{ public void onCallBack(); }
相关文章推荐
- Java 中4种访问修饰符 public/protected/default(friendly)/private
- java自带线程池和队列详细讲解
- Set(HashSet、TreeSet)、泛型
- java基础学习总结——流
- java基础学习总结——线程(二)
- java基础学习总结——线程(一)
- java基础学习总结——哈希编码
- JAVA设计模式
- Java制作证书的工具keytool用法总结
- Java基础学习总结——Java对象的序列化和反序列化
- java基础学习总结——java读取properties文件总结
- SpringMVC经典系列-12基于SpringMVC的文件上传---【LinusZhu】
- javaweb学习总结(三十一)——国际化(i18n)
- JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
- JavaWeb学习总结(五十一)——邮件的发送与接收原理
- java设计模式之享元模式
- JavaWeb学习总结(四十九)——简单模拟Sping MVC
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用