Theo như tôi có thể hiểu từ tài liệu java.lang.Thread
và từ các câu hỏi khác được đăng tại đây trên stackoverflow, như "How to access a Runnable object by Thread?" và "Get current instance of Runnable", bạn không thể tham chiếu đối tượng Runnable
được nhúng trong Thread
. Một kịch bản có khả năng này sẽ hữu ích là khi triển khai một phương thức, không thể sửa đổi chữ ký vì chúng tôi ghi đè phương thức được xác định trong lớp hoặc giao diện khác và yêu cầu phải thực hiện các hoạt động khác nhau tùy thuộc vào loại Runnable
được nhúng trong số Thread
hiện tại.Tại sao không thể có được Runnable được nhúng trong một Thread?
Nếu chúng ta có ví dụ một phương pháp gọi là getRunnable
trong lớp Thread
chúng ta có thể làm điều gì đó như thế này:
if (Thread.currentThread().getRunnable() instanceof Type1) {
// do something...
} else {
// do something else...
}
Điều này có thể cũng hữu ích trong các tình huống khi chúng ta muốn đảm bảo các hoạt động chứa đựng trong một phương pháp được chỉ được thực hiện bởi một số chủ đề chứ không phải bởi các chủ đề khác. Vì vậy, tôi đã tự hỏi, là có một lý do cụ thể tại sao các nhà phát triển Java đã quyết định không cho phép để có được các trường hợp Runnable
từ một Thread
, hoặc nó là một tính năng còn thiếu đáng để được thông báo? Không. Nếu bạn nghĩ rằng không có lý do đằng sau lựa chọn đó nhưng không đáng để thông báo cho nó là thiếu tính năng, bạn sẽ sử dụng chiến lược nào trong kịch bản được mô tả ở trên?
Điều gì sẽ là "Runnable" cho các chủ đề chính với các 'phương pháp main'? –
@KirkWoll, 'null'? –
Phân nhánh trên kết quả của 'instanceof' như bạn làm trong ví dụ của bạn gần như không bao giờ là một ý tưởng hay. – NPE