2014-12-10 16 views
48

Ai đó có thể vui lòng giải thích cho tôi sự khác biệt giữa các trạng thái chủ đề trong số Sleeping, Wait, ParkMonitor tiểu bang trong VisualVM.VisualVM - Tiểu bang Đề

enter image description here

Đây là những gì tôi đã tìm thấy:

Running: chủ đề vẫn chạy.
Sleeping: thread đang ngủ (năng suất phương pháp() được gọi trên đối tượng thread)
Wait: Chủ đề đã bị chặn lại bởi một mutex hoặc một rào cản, và đang chờ thread khác để mở khóa
Park: đề đậu là bị đình chỉ cho đến khi được cấp giấy phép. Unparking một sợi thường được thực hiện bằng cách gọi phương pháp unpark() trên đối tượng thread
Monitor: đề đang chờ đợi vào một điều kiện để trở thành sự thật để tiếp tục thực hiện

gì tôi không thể hiểu là công viên quốc gia, những gì thực sự đình chỉ chủ đề? Làm thế nào để phát hiện trong mã những gì đã làm cho các chủ đề đình chỉ thực hiện của nó?

Ai đó có thể vui lòng hướng dẫn tôi về vấn đề này.

Cảm ơn.

+0

Google là người bạn thân nhất của bạn - hãy sử dụng nó! –

+1

Cảm ơn! Tôi sẽ chỉ cập nhật câu hỏi của mình với những gì tôi đã tìm thấy trên google. –

Trả lời

29

Tôi đã sử dụng google và trang đầu tiên xuất hiện có sơ đồ rất đẹp, mô tả khá rõ tất cả những gì bạn cần/muốn biết. Tiếp theo thời gian giá trị của nó cố gắng google cho các loại câu hỏi.

enter image description here

1) New

Các chủ đề ở trạng thái mới nếu bạn tạo một thể hiện của lớp Thread nhưng trước khi gọi trình bắt đầu() phương pháp.

2) Runnable

Các chủ đề ở trạng thái Runnable sau khi gọi trình bắt đầu() phương pháp, nhưng scheduler chủ đề đã không được chọn nó sẽ được các sợi chạy.

3) Chạy

Các chủ đề là trong việc điều hành nhà nước nếu scheduler chủ đề đã chọn nó.

4) Đã chờ thời gian

Chờ đợi thời gian là trạng thái chuỗi cho một luồng chờ với thời gian chờ được chỉ định. Một chủ đề ở trạng thái chờ đợi theo thời gian do gọi một trong những phương pháp sau đây với một thời gian chờ đợi tích cực chỉ định:

  • Thread.sleep (sleeptime)
  • Object.wait (timeout)
  • Thread.Join (timeout)
  • LockSupport.parkNanos (timeout)
  • LockSupport.parkUntil (timeout)

5) Non-Runnable (Blocked)

Đây là trạng thái khi các chủ đề vẫn còn sống, nhưng hiện tại không đủ điều kiện để chạy.

6) Kết thúc

Một chủ đề là trong chấm dứt hoặc chết nhà nước khi chạy nó() phương pháp thoát.

Hy vọng điều này sẽ trả lời câu hỏi của bạn :).

xe:

Vô hiệu hóa tiểu trình hiện hành cho mục đích chủ đề lịch trừ trường hợp giấy phép có sẵn.

Chủ đề đang bị tạm dừng hoặc tạm ngưng nếu bạn muốn gọi theo cách này bởi vì nó không có quyền thực thi. Khi quyền được cấp, luồng sẽ không được thực hiện và thực hiện.

Giấy phép của LockSupport được liên kết với chủ đề (ví dụ: giấy phép được gán cho một chủ đề cụ thể) và không tích lũy (tức là chỉ có một giấy phép cho mỗi chủ đề, khi chuỗi tiêu thụ giấy phép, nó biến mất).

+0

Cảm ơn bạn đã trả lời. Tôi cũng đã trải qua điều này nhưng bằng cách nào đó câu hỏi của tôi vẫn chưa được trả lời. Bạn có thể vui lòng đi qua câu hỏi của tôi một lần nữa; Tôi đã cập nhật nó. Đặc biệt đang tìm kiếm câu trả lời w.r.t. trạng thái công viên. –

+0

@AliShahAhmed đã cập nhật câu trả lời của tôi :) –

+0

cảm ơn một lần nữa vì đã cập nhật. Vì vậy, trong trạng thái của công viên, là thread chờ đợi cho nó để có được lên kế hoạch hoặc là nó chờ đợi trên một số điều kiện? –

19

VisualVM bản đồ trạng thái Java ren (như mô tả trong @ câu trả lời Maciej của) sang trạng thái trình bày trong giao diện của nó như sau:

BLOCKED -> Monitor 
RUNNABLE -> Running 
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below) 
TERMINATED/NEW -> Zombie 

SleepingPark những trường hợp cụ thể của (thời gian) chờ đợi:

Sleeping: specifically waiting in Thread.sleep(). 
Park:  specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport). 

(Các bản đồ được thực hiện trong ThreadMXBeanDataManager.java.)

Sơ lược (và không có thẩm quyền) thảo luận trạng thái luồng Java có thể được tìm thấy here.

Edited thêm:

Nó cũng đáng chú ý là đề chặn trong các cuộc gọi đến các phương pháp tự nhiên xuất hiện trong JVM như RUNNABLE, và do đó được báo cáo bởi VisualVM như Running (và như tiêu thụ 100% CPU).

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