Vòng đời của một luồng

Một phần của tài liệu Bài giảng Ngôn ngữ lập trình Java: Phần 2 - TS. Vũ Hữu Tiến (Trang 29 - 30)

Trạng thái của một luồng được minh họa trong biểu đồ UML tại hình 6.2. Tại một thời điểm bất kỳ, luồng có thể rơi vào một trong các trạng thái này.

95

New: Đây là trạng thái khi luồng vừa được khởi tạo bằng phương thức khởi tạo của

lớp Thread nhưng chưa được start(). Ở trạng thái này, luồng được tạo ra nhưng chưa được cấp phát tài nguyên và cũng chưa chạy.

Runnable (có thể chạy): Sau khi gọi phương thức start() thì luồng đã được cấp phát

tài nguyên và các lịch điều phối CPU cho luồng cũng bắt đầu có hiệu lực. Ở đây, chúng ta dùng trạng thái là Runnable chứ không phải Running, vì luồng không thực sự đang chạy mà nó muốn chạy nhưng phải đợi vì một luồng khác đang chạy.

Waiting (đợi): Đôi khi một luồng đang ở trạng thái runnable có thể chuyển sang

trạng thái waiting để chờ một luồng khác chạy.Từ trạng thái waiting, luồng được trở về trạng thái runnable khi có một luồng khác đánh thức nó để tiếp tục chạy.

Timed waiting (đợi trong khoảng thời gian): Một luồng đang ở trạng thái

runnable có thể chuyển sang trạng thái timed waiting để chờ trong một khoảng thời gian. Luồng trở về trạng thái runnable khi hết thời gian chờ hoặc khi sự kiện nào đó mà luồng đang chờ xảy ra.

Blocked (tạm dừng): Một luồng chuyển sang trạng thái blocked khi nó cố gắng

thực hiện một nhiệm vụ nhưng chưa thể hoàn thành ngay mà phải tạm thời đợi cho đến khi nhiệm vụ đó kết thúc. Ví dụ, khi một luồng đưa ra yêu cầu liên quan đến I/O, hệ điều hành sẽ block luồng cho đến khi các yêu cầu I/O được thực hiện xong. Sau đó luồng sẽ trở về trạng thái runnable. Khi luồng ở trạng thái blocked thì nó không thể sử dụng tài nguyên của bộ vi xử lý cho dù bộ vi xử lý rỗi.

Terminated (kết thúc): Luồng chuyển sang trạng thái terminated khi đã hoàn thành

các công việc hoặc khi có lỗi xảy ra.

Một phần của tài liệu Bài giảng Ngôn ngữ lập trình Java: Phần 2 - TS. Vũ Hữu Tiến (Trang 29 - 30)

Tải bản đầy đủ (PDF)

(65 trang)