Enum Thread.State định nghĩa 6 trạng thái:
- NEW — đã
new Thread(...)nhưng chưa gọistart(). - RUNNABLE — đang chạy hoặc đang chờ CPU cấp slot. JVM gộp hai tình huống này làm một, không có trạng thái "RUNNING" riêng.
- BLOCKED — đang chờ monitor lock để vào một khối
synchronized. - WAITING — chờ vô hạn sau
wait(),join(),LockSupport.park(); phải có thread khác đánh thức. - TIMED_WAITING — như trên nhưng có thời hạn:
sleep(ms),wait(ms),join(ms). - TERMINATED —
run()đã kết thúc (bình thường hoặc do exception).
java
Thread t = new Thread(() -> {});
t.getState(); // NEW
t.start();
t.join();
t.getState(); // TERMINATED
t.start(); // IllegalThreadStateExceptionHai điểm hay bị hỏi thêm: thread đã TERMINATED không start lại được; và thread bị chặn ở I/O (đọc socket) vẫn hiện RUNNABLE chứ không phải BLOCKED — vì với JVM đó là lời gọi hệ điều hành, không phải chờ lock.