Đây là một số mã mẫu từ một số example. Điều tôi cần biết là khi nào call()
được gọi trên điện thoại có thể gọi? Điều gì kích hoạt nó?Khi nào phương thức call() được gọi trong Java Executor khi sử dụng các đối tượng Callable?
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);
}
}
tôi hiểu được những vấn đề về chủ đề ngày càng trở nên có sẵn vào một thời điểm không thể đoán trước, tôi cần phải có hỏi 'khi nào có thể gọi ** được lên lịch **' - miễn là nó được lên lịch * gửi() * thì đó là tất cả những gì tôi cần biết :) – MalcomTucker
@Malcom: Tôi không nghĩ rằng điều đó sẽ tốt hơn câu hỏi, vì lịch trình không hiển thị/quan sát được đối với chương trình, vậy điều gì sẽ thay đổi khi nó được lên lịch vào một thời điểm sau đó? –