详解java 三种调用机制(同步、回调、异步)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用
2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;
3:异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口
具体说来:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,
实例1:使用java中Timer来在给定时间间隔发送通知,每隔十秒打印一次数据
TimePrinter实现ActionListener接口,该接口中的actionPerformed方法就是回调函数
importjava.awt.Toolkit; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.util.Date; /** *TimePrinter实现回调函数接口 */ publicclassTimePrinterimplementsActionListener{ @Override publicvoidactionPerformed(ActionEventevent){ //TODOAuto-generatedmethodstub Datenow=newDate(); System.out.println("Nowtimeis"+now); Toolkit.getDefaultToolkit().beep(); } }
测试端
importjava.awt.event.ActionListener; importjavax.swing.JOptionPane; importjavax.swing.Timer; publicclassTimerTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub ActionListenerlistener=newTimePrinter(); Timertimer=newTimer(10000,listener); timer.start(); JOptionPane.showMessageDialog(null,"quit"); System.exit(0); } }
运行结果:每隔10s打印,运行程序后需要耐心等待。
NowtimeisFriApr1522:31:53CST2016
NowtimeisFriApr1522:32:03CST2016
NowtimeisFriApr1522:32:13CST2016
从结果发现Timer每隔10s中回调listener中的方法。
实例2:老师平时学生布置任务后不可能一直等待和监督学生完成,老师通常会告诉学生,任务完成后给他打个电话或者发个信息,那么学生给老师返回结果的过程需要老师信息,这就是一个回调的过程。
publicinterfaceCallback{ publicvoidtaskResult(Stringname); }
/** *学生必须指导老师的信息,才能回报任务情况,因此它必须实现回调接口 * */ publicclassTeacherimplementsCallback{ @Override publicvoidtaskResult(Stringname){ //TODOAuto-generatedmethodstub System.out.println("任务:"+name+"完成"); } }
publicclassStudent{ Callbackcallback=null; //将老师的联系信息给学生 publicvoidsetCallback(Callbackcallback) { this.callback=callback; } publicvoiddoTask() { for(intm=1;m<6;m++) { callback.taskResult(m+"是张三"); } } }
测试端:
publicclassCallbackTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Studentstudent=newStudent(); student.setCallback(newTeacher()); student.doTask(); } }
运行结果:
任务:1是张三完成
任务:2是张三完成
任务:3是张三完成
任务:4是张三完成
任务:5是张三完成
以上所述是小编给大家介绍的java三种调用机制(同步、回调、异步)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!