!
%
(
$
+
%
%
)
%
1, Thread-2, v.v…
Chương trình bắt đầu thực thi luồng với việc gọi phương thức start(), mà phương
thức này phụ thuộc vào lớp luồng. Phương thức này, lần lượt, viện dẫn phương thức run(),
nơi mà phương thức định nghĩa tác vụ được thực thi. Phương thức này có thể viết đè lên
lớp con của lớp luồng, hoặc với một đối tượng Runnable.
8.4
Vòng đời của Luồng
khi một
Hình 8.3 Vòng đời của luồng
8.5
Phạm vi của luồng và các phương thức của lớp luồng
Một luồng đã được tạo mới gần đây là trong phạm vi “sinh”. Luồng không bắt đầu
chạy ngay lập tức sau khi nó được tạo ra. Nó đợi phương thức start() của chính nó được
gọi. Cho đến khi, nó là trong phạm vi “sẵn sàng để chạy”. Luồng đi vào phạm vi “đang
chay” khi hệ thống định rõ vị trí luồng trong bộ vi xử lý.
Bạn có thể sử dụng phương thức sleep() để tạm thời treo sự thực thi của luồng.
Luồng trở thành sẵn sàng sau khi phương thức sleep kết thúc thời gian. Luồng Sleeping
không sử dụng bộ vi xử lý. luồng đi vào phạm vi “waiting” (đợi) luồng đang chạy gọi
phương thức wait() (đợi).
Khi các luồng khác liên kết với các đối tượng, gọi phương thức notify(), luồng đi vào
trở lại phạm vi “ready” (sẵn sàng) Luồng đi vào phạm vi “blocked” (khối) khi nó đang thực
thi các phép toán vào/ra (Input/output). Nó đi vào phạm vi “ready” (sẵn sàng) khi các
phương thức vào/ra nó đang đợi cho đến khi được hoàn thành. Luồng đi vào phạm vi
“dead” (chết) sau khi phương thức run() đã được thực thi hoàn toàn, hoặc khi phương
thức stop() (dừng) của nó được gọi.
Thêm vào các phương thức đã được đề cập trên, Lớp luồng cũng có các phương
thức sau:
Phương thức
Mục đích
Enumerate(Thread t)
Sao chép tất cả các luồng hiện hành vào mảng
được chỉ định từ nhóm của các luồng, và các
nhóm con của nó.
getName()
Trả về tên của luồng