2012-05-14 23 views
5

Các toán tử thường được sử dụng khi nói đến các nhiệm vụ (ngắn hạn), nhưng cách tốt nhất để xử lý các tác vụ dài hạn, ví dụ: nhiệm vụ nào sẽ chạy trong suốt thời gian tồn tại của một ứng dụng?Làm cách nào để thực thi các tác vụ lâu dài?

Giả sử tôi có một ứng dụng trong đó tác vụ chạy trên một chuỗi riêng lẻ sẽ thăm dò một thư mục để thay đổi mỗi X giây. Nhiệm vụ này không bao giờ nên bỏ phiếu, trừ khi ứng dụng thoát. Làm cách nào để tôi bắt đầu và quản lý việc này?

Liệu new Thread(theLongRunningTask).start() có phải là một lựa chọn tồi không?

Trả lời

5

Đây cũng là trường hợp sử dụng cho khung công tác Executors, cụ thể là scheduleAtFixedRate. Chỉ cần xem ra cho rằng chủ đề treo xung quanh khi ứng dụng được thực hiện. Bạn có thể sử dụng tùy chỉnh ThreadFactory để tạo chủ đề daemon. Hoặc, nếu bạn muốn một cái gì đó đơn giản hơn, hãy sử dụng API Timer. Bạn có thể xây dựng một Timer với một đối số boolean có nghĩa là "sử dụng chuỗi daemon". Bạn cũng có thể tắt dịch vụ thực thi một cách rõ ràng khi ứng dụng của bạn kết thúc.

+0

Thay vì threadfactory + daemon, bạn có thể tắt máy thực thi khi thoát (giả sử các tác vụ được gửi bị gián đoạn thân thiện và/hoặc không chạy mọi lúc). – assylias

+0

Vâng, tôi đồng ý - Tôi không thích các chủ đề daemon vì chúng có thể dễ dàng thoát khỏi sự kiểm soát của bạn về quản lý luồng. – Cowboy

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