Cấu hình Java JVM, trạng thái luồng - trạng thái “Giám sát” nghĩa là gì?


81

nhập mô tả hình ảnh ở đây

Tôi sử dụng visualVM kết nối một ứng dụng Java đa luồng, luồng có 4 trạng thái là đang chạy, đang ngủ, đang chờ, đang theo dõi. Trạng thái Giám sát này có nghĩa là gì? Sự khác biệt giữa chờ và Màn hình là gì?

Câu trả lời:


89

Các trạng thái này giống như đã đề cập trong Thread.Stateenum. "Chờ" có nghĩa là, như tài liệu cho biết:

Một luồng đang ở trạng thái chờ do gọi một trong các phương thức sau:

  • Object.wait mà không có thời gian chờ
  • Thread.join mà không có thời gian chờ
  • LockSupport.park

"Màn hình" là BLOCKEDtrạng thái, trong đó luồng đang đợi để có được khóa trên một đối tượng (vì nó đang cố gắng nhập một synchronizedkhối hoặc phương thức trong khi một luồng khác đã giữ khóa được liên kết).


24
Bất kỳ ai mới làm quen với chủ đề này (như OP) có thể hữu ích khi biết rằng "màn hình" được sử dụng như một từ đồng nghĩa với "khóa" ở đây và trong tài liệu.
matt b

6
Vẫn có cách nào để biết đối tượng được đồng bộ hóa (hoặc dòng mã) là đối tượng đang khiến luồng bị CHẶN / Màn hình?
user123321

3
@ user123321 Bạn có thể tạo luồng kết xuất. (Nút ở góc trên bên phải của tab "luồng".) Ở đó, bạn có thể thấy luồng đang cố gắng đồng bộ hóa với luồng nào và luồng nào giữ khóa.
Fildor

Và sự khác biệt giữa sleepingwaitingđược hiển thị trong ảnh chụp màn hình là gì ?!
Muhammad Gelbana

7

Đó không phải là trạng thái "giám sát" ... Nó chỉ ra rằng luồng đang ở Thread.State.BLOCKEDtrạng thái. Tôi thấy có một câu trả lời hay khác, tôi sẽ chỉ bạn đến liên kết này để giải thích sâu hơn


5

Màn hình sẽ có nghĩa là luồng đang đợi để đạt được khóa trên một đối tượng. Ví dụ: khi một luồng đang chạy một phương thức được đồng bộ hóa và một luồng khác cố gắng gọi nó trên cùng một đối tượng, nó sẽ không thể thực hiện cho đến khi kết thúc lần gọi đầu tiên của phương thức. Điều này là do luồng đầu tiên có một màn hình hoặc khóa trên đối tượng đó, vì vậy luồng thứ hai phải đợi cho đến khi nó được phát hành.

Từ Hướng dẫn phân luồng Oracle :

"Đồng bộ hóa được xây dựng xung quanh một thực thể bên trong được gọi là khóa nội tại hoặc khóa màn hình. (Đặc điểm kỹ thuật API thường đề cập đến thực thể này đơn giản là" màn hình ".) Khóa nội tại đóng một vai trò trong cả hai khía cạnh của đồng bộ hóa: thực thi quyền truy cập độc quyền vào một trạng thái của đối tượng và thiết lập các mối quan hệ xảy ra trước khi cần thiết cho khả năng hiển thị. "

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.