服务器之家

服务器之家 > 正文

详解java 三种调用机制(同步、回调、异步)

时间:2021-07-27 11:57     来源/作者:空心菜小能手

1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用
2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;
3:异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口

具体说来:就是a类中调用b类中的某个方法c,然后b类中反过来调用a类中的方法d,d这个方法就叫回调方法,

实例1:使用java中timer来在给定时间间隔发送通知,每隔十秒打印一次数据

timeprinter 实现actionlistener接口,该接口中的actionperformed方法就是回调函数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.awt.toolkit;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.util.date;
/**
 *timeprinter实现回调函数接口
 */
public class timeprinter implements actionlistener {
 
  @override
  public void actionperformed(actionevent event) {
    // todo auto-generated method stub
    date now=new date();
    system.out.println("now time is "+now);
    toolkit.getdefaulttoolkit().beep();
  }
 
}

测试端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.awt.event.actionlistener;
import javax.swing.joptionpane;
import javax.swing.timer;
 
public class timertest {
 
  public static void main(string[] args) {
    // todo auto-generated method stub
    actionlistener listener=new timeprinter();
    timer timer=new timer(10000, listener);
    timer.start();
    joptionpane.showmessagedialog(null, "quit");
    system.exit(0);
  }
 
}

运行结果:每隔10s打印,运行程序后需要耐心等待。

now time is fri apr 15 22:31:53 cst 2016
now time is fri apr 15 22:32:03 cst 2016
now time is fri apr 15 22:32:13 cst 2016

从结果发现timer每隔10s中回调listener中的方法。

实例2:老师平时学生布置任务后不可能一直等待和监督学生完成,老师通常会告诉学生,任务完成后给他打个电话或者发个信息,那么学生给老师返回结果的过程需要老师信息,这就是一个回调的过程。

?
1
2
3
4
public interface callback {
 
  public void taskresult(string name);
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 学生必须指导老师的信息,才能回报任务情况,因此它必须实现回调接口
 *
 */
public class teacher implements callback{
 
  @override
  public void taskresult(string name) {
    // todo auto-generated method stub
    system.out.println("任务:"+name+"完成");
  }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class student {
  callback callback=null;
  //将老师的联系信息给学生
  public void setcallback(callback callback)
  {
    this.callback=callback;
  }
   public void dotask()
   {
     for(int m=1;m<6;m++)
     {
       callback.taskresult(m+"是张三");
     }
   }
}

测试端:

?
1
2
3
4
5
6
7
8
9
10
public class callbacktest {
 
  public static void main(string[] args) {
    // todo auto-generated method stub
    student student=new student();
    student.setcallback(new teacher());
    student.dotask();
  }
 
}

运行结果:

任务:1是张三完成
任务:2是张三完成
任务:3是张三完成
任务:4是张三完成
任务:5是张三完成

以上所述是小编给大家介绍的java 三种调用机制(同步、回调、异步)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部