2012-11-26 23 views
8

Tôi có một Callable<String>. Tôi muốn chạy nó định kỳ thông qua ScheduledExecutorService.scheduleAtFixedRate() và để có được danh sách tất cả các Chuỗi đã được trả lại bằng lời gọi .call() trên số điện thoại có thể gọi của tôi. Như scheduleAtFixedRate không mất một Callable (chỉ Runnable s) Tôi cần phải tung ra một tùy chỉnh Runnable rằng kết thúc tốt đẹp Callable của tôi, một cái gì đó dọc theo những dòng:Định kỳ chạy một cuộc gọi qua ScheduledExecutorService

final Callable<String> myCallable = ....; 
final ConcurrentLinkedQueue<String> results 
    = new ConcurrentLinkedQueue<String>(); 

Runnable r = new Runnable() { 
    @Override public void run() { 
    try { 
     results.add(myCallable.call()); 
    } catch (Exception e) { 
     results.add(null); // Assuming I want to know that an invocation failed 
    } 
    } 
}; 

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); 
executor.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS); 

Đương nhiên, tôi muốn tránh tung ra tùy chỉnh của riêng tôi thingies (đặc biệt là trong mã đa luồng), vì vậy tôi tự hỏi có một lớp JDK mà loại này tập hợp?

+0

không, không có một tiện ích có sẵn trong jdk đặt kết quả Callable thành một bộ sưu tập dành cho bạn. – jtahlborn

+0

Đó là những gì tôi nghĩ. Cảm ơn. –

Trả lời

0

Những gì bạn đang làm ở trên đang xử lý Triển khai khả năng gọi của bạn chỉ là một lớp bình thường khác. Bạn không gửi được lời gọi đến người thực thi ThreadPool. Gọi Callable.call() không sử dụng ThreadPoolExecutor.

Bạn cần gửi tác vụ của mình (Runnable/Callable/ForkJoinTask, v.v.) đến ThreadPool để sử dụng tính năng nhóm luồng. Bạn có thể sử dụng tương lai để thu thập kết quả sau khi thực thi.

ForkJoinPool là một tùy chọn mà bạn có thể dùng thử một phần của JDK 7. Ngã ba công việc và tham gia bằng cách sử dụng ForkJoinTask Tại sao không sử dụng Futures? Họ là chính xác có nghĩa là cho biết trạng thái của nhiệm vụ và kết quả của nó.

Bạn có xem xét điều này: Using Callable to Return Results From Runnables

Các vấn đề liên quan