多线程异步调用接口数据同步问题

  1. 在多线程进行接口调用时如果调用的接口执行时间不同会直接跳过慢的接口,导致最终数据出错。
  • PrintUtil类模拟被调用的2个接口方法
    多线程异步调用接口数据同步问题_第1张图片
  • ThreadDemo类是多线程的实现类
    多线程异步调用接口数据同步问题_第2张图片
  • Test类是调用方。
    多线程异步调用接口数据同步问题_第3张图片
  • 注释掉f1.join()时执行结果:
    在这里插入图片描述
  • 因为fun1执行时间慢于fun2所以导致f1的结果没有写入map中;当使用f1.join()时执行结果:
    在这里插入图片描述
    但是在实际场景中无法明确知道各个接口的执行时间所以这种方法(join())无法避免出错。
  1. 引入FutureTask类,通过FutureTask类的get方法来获取线程执行结果,在获得结果之前会阻塞当前线程。
  • Test类:
    多线程异步调用接口数据同步问题_第4张图片
  • ThreadDemo类:
    多线程异步调用接口数据同步问题_第5张图片
  • 执行结果:
    在这里插入图片描述
    参考:https://blog.csdn.net/qianxiaopeng/article/details/82853689
    https://www.cnblogs.com/ruiati/p/6133174.html(使用线程池)

也可以使用1,线程池结合isterminated;2,new Thread子线程并将子线程放入数组中使用foreach遍历各个子线程使用join()方法。(https://www.iteye.com/blog/wwwiteye-2152240)

你可能感兴趣的:(多线程异步调用接口数据同步问题)