2010-10-26 28 views
7

Có ai có cái nhìn sâu sắc nào về lịch sử của phương thức run() của lớp Java Thread đang được công khai không? Hầu như tất cả thời gian, nó được sử dụng bằng cách ghi đè và do đó công cụ sửa đổi được bảo vệ có phù hợp hơn không? Điều đó vẫn sẽ để lại start() như là api công khai cho người dùng và do đó không để lại bất kỳ chỗ nào cho những sai lầm với người dùng gọi run() vô tình.Lợi ích của công cụ sửa đổi trên Java Thread's run()

Trả lời

10

Thread thực hiện Runnable, xác định phương thức run(), vì vậy nó phải được công khai.

Nhưng vì Java 1.5 được khuyến khích sử dụng Executors services thay vì java.lang.Thread. Các công tố viên đang tách đơn vị công việc được thực thi (Runnable, Callable) từ người thực thi thực tế. (Với Thread chúng giống nhau)

+0

Vâng, bạn nói đúng và tôi nghĩ đó là lý do tại sao hàm run() nằm trong đó như một phương thức công khai. Trong thực tế, vì có một hàm tạo có một đối số Runnable - Public Thread (mục tiêu Runnable), nên đã phủ nhận sự cần thiết phải thực hiện Runnable? – gshx

+0

"KHÔNG được khuyến khích"? không ngược lại? :-) –

+0

cảm ơn. thêm một 'không' :) bị xóa. – Bozho

2

run được định nghĩa trong giao diện Runnable và tất cả các phương pháp được xác định trong giao diện đều được công khai.

+0

Cảm ơn nhưng tôi cần phải xây dựng một số chi tiết trong câu hỏi của tôi - không Thread thực sự cần phải thực hiện Runnable khi nó làm tất cả các công việc của nó trên mục tiêu Runnable tiêm bên trong nó? – gshx

3

Bạn tốt hơn là không ghi đè Chủ đề, bạn nên tạo Runnable và chuyển nó vào hàm tạo cho Chủ đề mới. Bằng cách đó, công việc đang được thực hiện, Runnable, được giữ riêng biệt với cơ chế thực thi, Chủ đề.

+0

Nathan, tôi đồng ý với bạn và đó là lý do tại sao tôi tự hỏi tại sao nó lại ở nơi đầu tiên - việc sử dụng Thread runnable khi lớp Thread đã có một constructor chấp nhận một Runnable ghi đè run() – gshx

+0

@gshx : Câu hỏi hay, đoán của tôi là nó được cung cấp như một phím tắt. –

1

Tôi nghĩ rằng về cơ bản nó là một thiết kế tồi tệ, vì lợi ích của việc làm mọi thứ "đơn giản" cho người dùng, cho phép ghép nối tác vụ được chạy (Runnable) vào luồng để chạy trực tiếp. Vì Thread đã được thêm vào trong JDK 1.0, mặc dù, thiết kế đó đã không thể thay đổi kể từ đó, chỉ bị phản đối (loại) ủng hộ khung công tác Executor. JDK 1.0 đã được một thời gian dài trước đây, và nhiều sai lầm đã được thực hiện mà không có lợi ích của kinh nghiệm kể từ đó.

+0

Tôi thực sự ủng hộ việc bỏ chạy lệnh run() trên Thread với một gợi ý để sử dụng các thực thi thay thế.Rõ ràng là không thể làm cho nó được bảo vệ ngay bây giờ. – gshx

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