好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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 三种调用机制(同步、回调、异步)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

查看更多关于详解java 三种调用机制(同步、回调、异步)的详细内容...

  阅读:21次