2016-03-11 16 views
6

Tôi đã đọc câu trả lời qua các bài đăng sau đây: Difference between WAIT and BLOCKED thread states Tuy nhiên, tôi vẫn đang bối rối.Sự khác nhau giữa trạng thái Chủ đề bị chặn và đang chờ

Tôi muốn biết sự khác biệt về mức JVM là gì và sự khác biệt về mức CPU.

Liệu cả hai tùy chọn này có "Trình chuyển đổi ngữ cảnh chủ đề" không? , nhanh hơn trên môi trường đa luồng?

Trả lời

1

Giả sử bạn hỏi sự khác biệt giữa các trạng thái Thread.State.BLOCKEDThread.State.WAITING (tức là, được trả về bởi t.getState())?

Tôi muốn biết sự khác biệt về mức JVM là gì và sự khác biệt trên CPU

Làm việc từ dưới lên, không có sự khác biệt ở cấp phần cứng bởi vì những quốc gia không phải là khái niệm phần cứng . Các chủ đề WAITING và các luồng BLOCKED không sử dụng tài nguyên CPU chút nào. Nếu CPU không chạy mã chương trình của bạn, thì đó là mã chạy thuộc về một số quy trình khác hoặc hệ điều hành; hoặc người nào khác, nó đang ở trạng thái nhàn rỗi không liên quan gì đến Java hoặc JVM.


Sau đó, bạn bỏ qua một lớp - hệ điều hành. Tất cả các JVM thực thi thực hiện các luồng Java bằng cách sử dụng các nguyên thủy luồng được cung cấp bởi hệ điều hành.

Trong hệ điều hành, mỗi chuỗi được đại diện bởi một đối tượng chứa tất cả thông tin mà hệ điều hành cần biết về chuỗi. Khi một luồng đang chạy trên một số CPU, đối tượng sẽ báo cho hệ điều hành biết CPU và thời gian nó đang chạy, vv Khi một luồng không chạy, đối tượng chứa ảnh chụp nhanh của trạng thái CPU phải được khôi phục để làm cho thread chạy một lần nữa.

Mỗi đối tượng chuỗi trong hệ điều hành có thể tìm thấy trong một trong nhiều thùng chứa: Có một vùng chứa tập hợp tất cả các chuỗi đang chạy và có các vùng chứa khác (chủ yếu là hàng đợi) giữ chủ đề không chạy.

Thông thường có hàng đợi chạy chạy giữ các chuỗi đã sẵn sàng chạy, nhưng đang chờ CPU chạy. Sau đó, có một hàng đợi cho mỗi mutex (a.k.a., khóa) chứa đề chờ đợi để nhập mà mutex, một hàng đợi cho mỗi biến trạng chứa chủ đề đang chờ để được notify() d về căn bệnh đó, vv

Bất cứ khi nào một số chủ đề để lại một mutex, các hệ điều hành nhìn vào hàng đợi cho mutex đó. Nếu hàng đợi không trống, nó sẽ chọn một chuỗi từ hàng đợi đó và di chuyển nó đến hàng đợi chạy. Bất cứ khi nào một số thread gọi o.notify(), hệ điều hành chọn một chuỗi từ hàng đợi của biến điều kiện đó và di chuyển nó đến hàng đợi chạy hoặc, nếu chương trình gọi notifyAll(), hệ điều hành sẽ di chuyển tất cả chuỗi từ hàng đợi đó đến hàng đợi chạy.

Vì vậy, ở cấp hệ điều hành, nó không hẳn là một câu hỏi về những gì bang là thread trong, vì nó là một câu hỏi trong đó đợi là thread trong.


Cuối cùng , ở cấp độ JVM, không có nhiều điều để nói bởi vì JVM cho phép hệ điều hành thực hiện khá nhiều công việc. Java cung cấp hai trạng thái, RUNNING và WAITING đơn thuần là một tiện ích cho bạn, lập trình viên, trong trường hợp nó hữu ích cho bạn để biết sự khác biệt. (Gợi ý: Thật thú vị khi bạn nhìn vào một bãi chứa chương trình, và cố gắng tìm hiểu xem mỗi luồng đang hoạt động vào thời điểm nào.)

+0

cảm ơn rất nhiều. vấn đề này nhiều ngày của tôi .. cảm ơn câu trả lời của bạn .. tôi đã hiểu 。。 – Timi

0

Trạng thái chờ là khi chủ đề cố ý gọi phương thức wait(). Nó có nghĩa là nó chờ đợi một số sự kiện/hành động để hoàn thành. Nó giống như bạn đi đến chăm sóc khách hàng và hàng đợi là trống rỗng. Bạn đang chờ đợi vợ của bạn đến với thẻ bảo hành. Vì vậy, bạn đang cố ý chờ đợi.

Nhưng Trong trạng thái BLOCKED, Chủ đề đã sẵn sàng để chạy nhưng các sự kiện khác đã chặn nó vì một số lý do. Giống như một chuỗi sắp nhập một khối đồng bộ, nhưng có một luồng khác hiện đang chạy bên trong một khối được đồng bộ trên cùng một đối tượng.

Ví dụ khác là nhiều chuỗi được gọi là phương thức chờ để hoàn thành một số sự kiện. Khi sự kiện đó được hoàn thành, thông báoAllAll() được gọi. Sau đó, chỉ một chuỗi sẽ nhận chu kỳ CPU, những người khác sẽ vẫn bị chặn

Giống như bạn đi đến chăm sóc khách hàng và không có đại diện khách hàng nào có mặt. Bạn đã bị chặn.

+0

sự khác biệt về mức cpu và jvm là gì? cho dù cpu sẽ lên lịch một Thread trong chờ đợi hoặc bị chặn ... howerver nghĩ rằng bạn. – Timi

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