项目开发中为提高效率,往往一个方法内需要起多个线程并得到返回值,下面是我自己编写通过FutureTask、Callable在启用的多线程中得到返回值(学习中,有错误请指出;请不要关注业务)

1:创建2个service(为了方便观看,我在这2个线程中增加了等待时间)

多线程返回值FutureTask、Callable多线程返回值FutureTask、Callable

2:在action中一个方法调用这2个方法

@RequestMapping("/test")
@ResponseBody
public String test(){
    long start = System.currentTimeMillis();
    JSONObject jsonObject = new JSONObject();
    Callable<JSONObject> userCall = new Callable() {
        @Override
        public Object call() throws Exception {
            Org org = orgService.getOrg();
            JSONObject userJson = (JSONObject) JSONArray.toJSON(org);
            return userJson;
        }
    };
    Callable<JSONObject> orgCall = new Callable<JSONObject>() {
        @Override
        public JSONObject call() throws Exception {
            User user = userService.getUser();
            JSONObject orgJson = (JSONObject) JSONArray.toJSON(user);
            return orgJson;
        }
    };

    FutureTask<JSONObject> orgTask = new FutureTask<JSONObject>(orgCall);
    TestFutureTask<JSONObject> userTask = new TestFutureTask<JSONObject>(userCall);

    new Thread(orgTask).start();
    new Thread(userTask).start();

    try {
        jsonObject.putAll(orgTask.get());
        jsonObject.putAll(userTask.get());
    }catch (Exception e){
        e.printStackTrace();
    }

    long end = System.currentTimeMillis();
    long time = end-start;
    System.out.println("总共用时-----------------------------"+time);
    return jsonObject.toJSONString();
}

----------------------------------------------------------------分割线------------------------------------------------------------------------------

多线程返回值FutureTask、Callable

此处调用我new了2种FutureTask,其中一个是我自己编写的,下面我贴出我自己编写的代码,并简单介绍:

该类需要实现RunnableFuture接口

多线程返回值FutureTask、Callable

先创建2个全局变量和一个构造方法,

一个是传入的参数(多线程返回值FutureTask、Callable),

一个为返回的参数(多线程返回值FutureTask、Callable),

其中传入的参数通过构建方法传入

多线程返回值FutureTask、Callable

在重写run方法和get方法

多线程返回值FutureTask、Callable

多线程返回值FutureTask、Callable

我门在实际开发中不需要自己编写FutureTask,直接使用JDK提供的FutureTask就可以,我只是学习过程中看看JDK提供的FutureTask之后想自己实现一下,JDK提供的FutureTask实现原理大致也就是这样,只不过我只是实现了2个方法,别的方法如果喜欢钻研的话也可以看看实现方式,我在这就不编写了

相关文章:

  • 2021-08-27
  • 2022-01-14
  • 2021-06-03
  • 2021-08-22
  • 2021-08-25
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-20
  • 2022-03-07
  • 2021-05-24
  • 2021-10-06
  • 2022-12-23
  • 2022-01-06
相关资源
相似解决方案