2015-02-15 44 views
8

Thread.currentThread() là phương thức tĩnh tĩnh cung cấp tham chiếu đến chuỗi đang thực hiện (về cơ bản là tham chiếu đến chuỗi 'this').Thread.currentThread() hoạt động như thế nào?

Truy cập thành viên không tĩnh (đặc biệt là this) bên trong một phương pháp tĩnh là không thể trong Java, do đó, currentThread() là một phương pháp gốc.

Phương thức hoạt động của currentThread() đằng sau hậu trường như thế nào?

+0

Bạn có thể xem mã OpenJDK đang triển khai phương pháp này. Tại một đoán, tôi muốn nói nó yêu cầu hệ điều hành mà thread nó trên, sau đó bản đồ mà thread ID cho một đối tượng Thread. –

+2

Tôi không biết về chi tiết triển khai 'currentThread', nhưng bạn có thể sử dụng' ThreadLocal' nếu bạn muốn sử dụng cùng một cơ chế chung trong mã của riêng bạn. – duckstep

+0

Câu hỏi rất hay. Đặc biệt, đối tượng được trả về bởi _currentThread() _ luôn giống với đối tượng 'Thread' được sử dụng để bắt đầu ** thread **? Nó có thể tạo ra hai đối tượng 'Thread' cho cùng một ** thread ** không? Một hàm gốc có thể tạo một luồng ** và gọi mã Java không? Đối tượng 'Thread' sẽ được trả về cho ** thread ** như thế nào? – 18446744073709551615

Trả lời

5
(basically a reference to 'this' thread) 

Sai. Không có tài liệu tham khảo this nào có liên quan ở đây.

Bạn đang trộn lên một sợi như một nguồn tài nguyên tự nhiên, có nghĩa là các chủ đề thực hiện; và Thread, là một lớp Java. Mã chủ đề không chạy "bên trong" cá thể Thread, ví dụ đó chỉ là xử lý của bạn vào điều khiển luồng của Java. Giống như một ví dụ Filekhông phải là tệp.

Vì vậy, Thread.currentThread() là cách để bạn truy xuất thể hiện của Thread phụ trách luồng chỉ trong phương thức được gọi. Làm thế nào chính xác Java hiện này là một chi tiết thực hiện mà không phải là mối quan tâm của bạn trừ khi bạn đang khám phá các chi tiết của một thực hiện JVM cụ thể.

+0

Nó không phải là một sự tương tự hoàn hảo, như một thể hiện tệp là một đường dẫn có thể giải quyết cho nhiều tệp cấp hệ điều hành thực tế trong suốt cuộc đời của nó, trong khi một thể hiện Thread chỉ đại diện cho một chuỗi duy nhất trong suốt cuộc đời của nó. Nhưng ý tưởng về các thể hiện của Thread là xử lý âm thanh. –

+0

@JeffreyBosboom Sự không phù hợp giữa vòng đời của 'Chủ đề' và chuỗi cơ bản làm cho sự tương tự này mạnh hơn, mặc dù. 'Thread' có thể (và không tồn tại) mà không có chuỗi thực thi cơ bản --- và thực tế có thể dễ dàng biểu diễn các luồng hệ điều hành khác nhau tại các thời điểm khác nhau (thực sự nằm ngoài phạm vi của đặc tả). –

+0

@Marko Cho phép nói rằng tôi đang khám phá các chi tiết ở đây, bạn có thể giúp tôi tìm nguồn gốc của phương thức currentThread() không? Tôi thực sự muốn xem chính xác những gì đang xảy ra bên trong phương pháp này. – maximus335

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