加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

什么时候使用Callable对象在Java Executor中调用call()方法?

发布时间:2020-12-14 05:55:42 所属栏目:Java 来源:网络整理
导读:这是 example的一些示例代码.我需要知道的是在calllable上调用call()的时候?触发它的是什么? public class CallableExample {public static class WordLengthCallable implements Callable { private String word; public WordLengthCallable(String word)
这是 example的一些示例代码.我需要知道的是在calllable上调用call()的时候?触发它的是什么?
public class CallableExample {

public static class WordLengthCallable
    implements Callable {
    private String word;
    public WordLengthCallable(String word) {
      this.word = word;
    }
    public Integer call() {
      return Integer.valueOf(word.length());
    }
}

public static void main(String args[]) throws Exception {
    ExecutorService pool = Executors.newFixedThreadPool(3);
    Set<Future<Integer>> set = new HashSet<Future<Integer>>();
    for (String word: args) {
      Callable<Integer> callable = new WordLengthCallable(word);
      Future<Integer> future = pool.submit(callable); //**DOES THIS CALL call()?**
      set.add(future);
    }
    int sum = 0;
    for (Future<Integer> future : set) {
      sum += future.get();//**OR DOES THIS CALL call()?**
    }
    System.out.printf("The sum of lengths is %s%n",sum);
    System.exit(sum);
  }
}

解决方法

一旦提交了callable,执行程序就会调度callable以便执行.根据执行程序的不同,这可能会直接发生,也可能在线程可用后发生.

另一方面,调用get只等待检索计算结果.

所以准确地说:在中间提交被调用和调用返回之间,调用可调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读