Tôi có một câu hỏi rất cơ bản. Nếu một luồng đang bận trong thao tác IO thì tại sao nó không được xem xét trong trạng thái RUNNING? Nếu hoạt động IO mất nhiều thời gian, điều đó có nghĩa là luồng đang hoạt động. Làm thế nào một thread có thể được gọi là BLOCKED khi nó thực sự đang làm việc đó?Chủ đề Java - trạng thái bị chặn
Trả lời
Tôi không biết nơi bạn đọc một chuỗi đang ở trạng thái BLOCKED khi thực hiện IO. BLOCKED state documentation nói:
Trạng thái chủ đề cho một chuỗi bị chặn đang chờ khóa màn hình. Một luồng trong trạng thái bị chặn đang chờ một khóa màn hình để nhập một khối/phương thức được đồng bộ hóa hoặc nhập lại một khối/phương thức đã đồng bộ sau khi gọi Object.wait.
Vì vậy, không, chuỗi không ở trạng thái bị chặn trong khi thực hiện IO (trừ khi đọc hoặc viết bắt buộc phải đợi trên màn hình của đối tượng).
Nếu bạn chạy đoạn mã sau với một sợi chặn trên IO
public class Main {
public static void main(String[] args) throws InterruptedException {
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// blocking read
try {
System.in.read();
} catch (IOException e) {
throw new AssertionError(e);
}
}
});
thread.start();
for(int i=0;i<3;i++) {
System.out.println("Thread status: "+thread.getState());
Thread.sleep(200);
}
System.exit(0);
}
}
in
Thread status: RUNNABLE
Thread status: RUNNABLE
Thread status: RUNNABLE
Vì vậy, trạng thái luồng là 'RUNNABLE' khi chặn IO không là gì ngoài việc chiếm thời gian của CPU, không làm gì ngoài việc chờ phản hồi IO. Phải không? – overexchange
@overexchange khi một luồng đang chặn, nó không sử dụng CPU (trừ khi vào và thoát khỏi chế độ này) Sự nhầm lẫn là do thực tế JVM không biết khi nào một cuộc gọi hệ thống chặn được thực hiện khi hệ điều hành quyết định điều này . –
Mặc dù lát thời gian được phân bổ, luồng chặn IO, không yêu cầu CPU cho lát thời gian đó, điều này được hiểu, nhưng không có luồng nào khác đang sử dụng CPU đó, cho lát thời gian đó. Phải không? – overexchange
- 1. Chủ đề Java chờ() => bị chặn?
- 2. Chủ đề bị chặn vô thời hạn - Haskell - Trạng thái Acid
- 3. Sự khác nhau giữa trạng thái Chủ đề bị chặn và đang chờ
- 4. Giết chặn bị chặn :: Chủ đề
- 5. JIRA JQL: thẻ màu theo trạng thái bị chặn
- 6. Kết nối RabbitMQ trong trạng thái chặn?
- 7. Chủ đề chặn plugin Cordova
- 8. Dừng một chủ đề bị kẹt tại cuộc gọi chặn
- 9. SimpleSAMLphp Thông tin trạng thái bị mất
- 10. Tránh chủ đề chính bị đóng băng khi UIWebView cố khóa chặn chủ đề web
- 11. Trạng thái tortoisesvn: bị che khuất
- 12. Xác định trạng thái kích hoạt trạng thái thạch anh bị tạm dừng?
- 13. Chủ đề bị lỗi với khóa Mutex
- 14. Các chủ đề wxPython chặn
- 15. Trạng thái lưu trữ trong Java
- 16. Tại sao ba trạng thái luồng "chặn" trong Java nhưng chỉ có một trong C#?
- 17. NSTask chặn chủ đề chính
- 18. Trạng thái mức/trạng thái Pygame
- 19. SVN: Không thể đọc dòng trạng thái: kết nối đã bị đóng bởi máy chủ
- 20. Trạng thái bị treo trong Màn hình hoạt động SQL
- 21. Kiểm tra trạng thái thiết bị bluetooth đã kết nối
- 22. không thể giết công việc máy chủ SQL, trạng thái vẫn bị giết/khôi phục
- 23. máy trạng thái hữu hạn hướng sự kiện + chủ đề: làm thế nào?
- 24. Lỗi khi cài đặt gói 'mô hình chủ đề', trạng thái thoát không 0; Ubuntu
- 25. pthread Các đối tượng chủ đề đặt lại trạng thái của chúng
- 26. componentWillReceiveProps trạng thái khác với trạng thái hiển thị sau khi cập nhật trạng thái redux
- 27. UI-Router AngularJs: Ngăn chặn điều khiển trạng thái cha mẹ gọi khi chuyển sang trạng thái con
- 28. Chụp mã trạng thái http bằng con nhện bị lột
- 29. cách tìm trạng thái màn hình trên thiết bị Android?
- 30. Capybara :: Lỗi trạng thái Poltergeist, không đạt được máy chủ
việc kiểm tra này http://stackoverflow.com/questions/13596997/why-is-the- cpu-not-needed-to-service-io-yêu cầu – Changgeng
Nó không làm bất kỳ công việc nào, nó không chạy trên lõi, nó đang sử dụng không có CPU, do đó, xem xét nó 'CHẠY' không chính xác phù hợp! –
Có thể bạn nhầm lẫn cụm từ "bị chặn" trong ngữ cảnh chủ đề, với "chặn hoạt động I/O" có nghĩa là có một chút khác biệt. – BartoszKP