Trang chủHướng dẫnVòng đời của Thread trong Java – Các trạng thái của Thread trong Java
Java

Vòng đời của Thread trong Java – Các trạng thái của Thread trong Java

CyStack blog 3 phút để đọc
CyStack blog22/08/2025
Locker Avatar

Bao Tran

Web Developer

Locker logo social
Reading Time: 3 minutes

Hiểu vòng đời của Thread trong Java là rất quan trọng khi khi bạn làm việc với Thread và lập trình trong môi trường đa luồng (multithreaded).

Trong bài trước, chúng ta đã biết có thể tạo một Java Thread bằng cách implement interface Runnable hoặc kế thừa class Thread. Tuy nhiên, để bắt đầu một thread, trước tiên chúng ta phải tạo ra đối tượng Thread và gọi phương thức start() của nó để thực thi phương thức run() như một luồng riêng biệt.

Vòng đời của Thread trong Java

Vòng đời của Thread trong Java

Sơ đồ dưới đây cho thấy các trạng thái khác nhau của vòng đời thread trong Java. Chúng ta có thể tạo một thread trong Java và khởi động nó, nhưng cách trạng thái của thread thay đổi từ Runnable sang Running rồi Blocked tùy thuộc vào cách hệ điều hành triển khai bộ lập lịch thread (thread scheduler), và Java không có toàn quyền kiểm soát điều đó.

New (Mới tạo)

Khi chúng ta tạo một đối tượng Thread mới bằng toán tử new, trạng thái của thread sẽ là New. Ở giai đoạn này, thread chưa “sống” (not alive) và đây chỉ là một trạng thái nội bộ trong lập trình Java, nghĩa là thread vẫn chưa được JVM đưa vào hàng đợi để chạy.

Runnable (Sẵn sàng chạy)

Khi chúng ta gọi phương thức start() trên đối tượng Thread, trạng thái của thread sẽ chuyển sang Runnable. Lúc này, quyền điều khiển được trao cho Thread Scheduler để sắp xếp việc thực thi thread. Việc thread được chạy ngay lập tức hay phải nằm chờ trong Runnable Pool trước khi được chạy sẽ phụ thuộc vào cách hệ điều hành (OS) triển khai Thread Scheduler.

Running (Đang chạy)

Khi một thread đang thực thi, trạng thái của nó sẽ chuyển sang Running. Thread Scheduler sẽ chọn một thread từ Runnable Pool và đổi trạng thái của nó thành Running, sau đó CPU bắt đầu thực hiện thread này. Một thread có thể chuyển từ trạng thái Running sang Runnable, Dead hoặc Blocked tùy thuộc vào cơ chế chia thời gian (time slicing), việc hoàn thành phương thức run() hoặc việc phải chờ một số tài nguyên để tiếp tục.

Blocked/Waiting (Bị chặn/Chờ)

Một thread có thể ở trạng thái chờ khi đợi một thread khác hoàn thành bằng cách sử dụng join hoặc khi chờ tài nguyên sẵn sàng. Ví dụ như trong bài toán Producer Consumer, cơ chế wait/notify, hoặc khi chờ tài nguyên IO, trạng thái của thread sẽ chuyển sang Waiting. Khi thời gian chờ kết thúc hoặc tài nguyên đã sẵn sàng, trạng thái sẽ chuyển về Runnable và thread được đưa lại vào Runnable Pool.

Dead (Kết thúc)

Khi một thread hoàn tất việc thực thi, trạng thái của nó sẽ chuyển sang Dead và được coi là không còn sống. Trên đây là các trạng thái khác nhau của thread; việc hiểu rõ chúng và cách một thread thay đổi trạng thái sẽ giúp bạn lập trình đa luồng hiệu quả hơn. Đây là toàn bộ nội dung về vòng đời của thread trong Java.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất