Java:异步方法调用,返回不同的类型数据

时间:2016-09-04 19:46:01

标签: java asynchronous executorservice

我想执行3个java方法,并且它们都返回不同类型的数据(比如Class类型)。有没有办法可以使用ExecutorService并行运行这3种方法?通过这种方式,call()方法需要返回特定内容,这会破坏我使用它的想法。

如果有办法实现这一点,请告诉我。

2 个答案:

答案 0 :(得分:0)

Callables方法通常会返回特定的内容,这就是它有用的原因。您可以创建3种不同类型的Callable<A> c1 = () -> { return getA(); }; Callable<B> c2 = () -> { return getB(); }; Callable<C> c3 = () -> { return getC(); }; Future<A> f1 = executor.submit(c1); Future<B> f2 = executor.submit(c2); Future<C> f3 = executor.submit(c3); ,并且没有问题。

// returns the chats for that profile
Chat.allChatsByUser(uid).$loaded()
 .then(function(data) {     
   for (var i = 0; i < data.length; i++) {
   // self calling function for async callback handling
   // this ensures that the async call is run for every iteration in the loop
   (function(i) {
      var item = data[i];
      // function to arrange users and chats fom newest to oldest
      // for each matched user. item.$id = uid              
      Auth.getProfile(item.$id).$loaded()
      .then(function(profile) { 
         // first function handles success
         if (typeof profile === 'object') { 
              if(chat.keyOrder == 'true') {

              // get last chat from firebase
              // WANT THIS COMPLETE BEFORE CONTINUING                       
              ref.child('chatting').child('messages').child(chat.chatId).on("value", function(data) {
                 profile.lastChat = data.child('lastMsg').val();
              });

             // pushes chatting users profile into the array
             chat.messages.push(profile);    

         } else {
               // invalid response
               return $q.reject(profile);
         }
 }, function(profile) {
   // promise rejected
   console.log('error', error);});
 // i argument as closure
 })(i);
}

答案 1 :(得分:0)

执行程序接受可调用任务,这是用于返回任意类型的通用功能接口。

    ExecutorService executorService = Executors.newCachedThreadPool();
    executorService.submit(() -> "Hello");
    executorService.submit(() -> new BigDecimal("1.1"));
    executorService.submit(() -> new ArrayList());

submit()返回一个Future,它是计算结果的通用持有者,它将具有与Callable返回的数据相同的泛型类型。

    Future<String> future = executorService.submit(() -> "Hello");

要访问结果,只需调用get():

    String result = future.get();