2010-07-13 26 views
14

Với JDK> = 1.5, cách ưa thích để bắt đầu một luồng luôn là một Dịch vụ Executor hoặc Executor, hoặc vẫn còn có lý do để thích sử dụng một Thread.start nếu bạn không cần những gì ExecutorService cung cấp?Bạn có nên sử dụng ExecutorService thay vì bắt đầu chuỗi của riêng mình không?

Để đồng bộ hóa, tôi đã từng nghĩ rằng việc sử dụng các thực thi Khóa mới được ưu tiên, cho đến khi tôi là explained otherwise. Vì vậy, tôi tự hỏi điều tương tự về Executors. Họ chỉ là một cách để xử lý các trường hợp phức tạp hơn, hay họ nên là sự lựa chọn tiêu chuẩn?

+0

Cả hai câu trả lời tuyệt vời, nhưng tôi phải đưa ra câu trả lời được chấp nhận đã đưa ra so sánh với Vector và Hashtable. – Yishai

Trả lời

10

Cá nhân, kể từ Java 5, tôi đã hoàn toàn còn sót lại ThreadThreadGroup, vì chúng cung cấp cách ít tùy biến và chức năng hơn ExecutorService.

Khi sử dụng ExecutorService, tôi biết tôi có thể sử dụng Callable, tôi biết tôi có thể (với một ít chi phí) lịch trình lặp lại nhiệm vụ. Kết quả là, tôi xem xét việc khởi tạo trực tiếp Thread mã không dùng nữa của đối tượng, như VectorHashtable.

10

Java Concurrency in Practice khẳng định ít nhất rõ ràng trong phần 6.2 .:

Các trừu tượng chính để thực hiện nhiệm vụ trong các thư viện lớp Java là khôngThread, nhưng Executor. [...]

Sử dụng Người thực thi thường là con đường dễ nhất để triển khai thiết kế của người tiêu dùng sản xuất trong ứng dụng của bạn.

2

Viết mã đa luồng chính xác rất khó. Vẻ đẹp của khung công tác Executor là nó thực hiện hầu hết các công việc nặng nề mà các nhà phát triển sẽ gặp phải và chỉ yêu cầu bạn triển khai thực hiện Callable hoặc Future và chương trình tới API java.util.concurrent. IMHO nó kết quả trong mã dễ đọc hơn nhiều và trình bày ít cơ hội hơn để triển khai không chính xác nó do sự phức tạp của việc quản lý đúng luồng.

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