同步调用和异步调用

系统管理员 2023-07-11 06:08 54阅读 0赞

同步调用:

调用者等待被调用者返回结果(执行完)才执行下一步
优点: 代码简单
缺点: 若被调用者执行的是耗时操作,会产生阻塞

异步调用:

调用者不用等待被调用者的返回结果也可以执行下一步

优点:若被调用者执行的是耗时操作,不会产生阻塞
缺点: 代码较复杂

还是不太懂?

举个例子:
同步调用:就像一个专情的屌丝男追求一个女孩,等待着这个女孩的回应,在等待回应之前这个男的不会去勾搭别的女孩。

异步调用:就好比一个渣男对女孩A发起追求(请求),等待女孩A回复的时候,这期间他又去勾搭女孩B。。。。

代码:

同步调用:

  1. public class syncCall
  2. {
  3. public String Wait()
  4. {
  5. try {
  6. Thread.sleep(3000);
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. System.out.println("女:同意了");
  11. return "同意了";
  12. }
  13. public void watchDog()
  14. {
  15. String string=Wait();
  16. System.out.println("男:你"+string+",我知道了!");
  17. }
  18. public static void main(String[] args) {
  19. syncCall sync=new syncCall();
  20. sync.watchDog();
  21. }
  22. }

执行结果是延时3秒打印输出

异步调用:

  1. public interface onEnd
  2. {
  3. void callBack(String message);
  4. }
  5. public class asyncCall
  6. {
  7. public String Wait()
  8. {
  9. try {
  10. Thread.sleep(3000);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. System.out.println("女:同意了");
  15. return "同意了";
  16. }
  17. //接口进行回调
  18. public void watchDog(onEnd end)
  19. {
  20. new Thread(new Runnable()
  21. {
  22. @Override
  23. public void run() {
  24. String message=Wait();
  25. end.callBack(message);
  26. }
  27. }).start();
  28. }
  29. public static void main(String[] args) {
  30. asyncCall sync=new asyncCall();
  31. sync.watchDog(new onEnd() {
  32. @Override
  33. public void callBack(String message) {
  34. System.out.println("男:你"+message+",我知道了!");
  35. }
  36. });
  37. while (true){
  38. System.out.println("渣男在追求别的女孩!");
  39. try {
  40. Thread.sleep(1000);
  41. } catch (InterruptedException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }

执行结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,54人围观)

还没有评论,来说两句吧...

相关阅读

    相关 同步调用异步调用

    同步调用: 调用者等待被调用者返回结果(执行完)才执行下一步 优点: 代码简单 缺点: 若被调用者执行的是耗时操作,会产生阻塞 异步调用: 调用者不用等待