www.updatesofts.com
!
"
+
&
public ThreadGroup(ThreadGroup tgroup, String str)
Ở đây, “tgroup” chỉ ra luồng đang chạy hiện thời như là luồng cha, “str” là tên của
nhóm luồng đang được tạo ra.
Một số các phương thức trong nhóm luồng (ThreadGroup) được cho như sau:
public synchronized int activeCount()
Trả về số lượng các luồng kích hoạt hiện hành trong nhóm luồng
public sunchronized int activeGroupCount()
Trả về số lượng các nhóm hoạt động trong nhóm luồng
public final String getName()
Trả về tên của nhóm luồng
public final ThreadGroup getParent()
Trả về cha của nhóm luồng
8.10 Sự đồng bộ luồng
Trong khi đang làm việc với nhiều luồng, nhiều hơn một luồng có thể muốn thâm
nhập cùng biến tại cùng thời điểm. Lấy ví dụ, một luồng có thể cố gắng đọc dữ liệu,
trong khi luồng khác cố gắng thay đổi dữ liệu. Trong trường hợp này, dữ liệu có thể bị
sai lạc.
Trong những trường hợp này, bạn cần cho phép một luồng hoàn thành trọn vẹn tác
vụ của nó (thay đổi giá trị), và rồi thì cho phép các luồng kế tiếp thực thi. Khi hai hoặc
nhiều hơn các luồng cần thâm nhập đến một tài nguyên được chia sẻ, bạn cần chắc chắn
rằng tài nguyên đó sẽ được sử dụng chỉ bởi một luồng tại một thời điểm. Tiến trình này
được gọi là “sự đồng bộ” (synchronization) được sử dụng để lưu trữ cho vấn đề này, Java
cung cấp duy nhất, ngôn ngữ cấp cao hổ trợ cho sự đồng bộ này. Phương thức “đồng bộ”
(synchronized) báo cho hệ thống đặt một khóa vòng một tài nguyên riêng biệt.
Mấu chốt của sự đồng bộ hóa là khái niệm “monitor” (sự quan sát, giám sát), cũng
được biết như là một bảng mã “semaphore” (bảng mã). Một “monitor” là một đối tượng
mà được sử dụng như là một khóa qua lại duy nhất, hoặc “mutex”. Chỉ một luồng có thể
có riêng nó một sự quan sát (monitor) tại mỗi thời điểm được đưa ra. Tất cả các luồng
khác cố gắng thâm nhập vào monitor bị khóa sẽ bị trì hoãn, cho đến khi luồng đầu tiên
thoát khỏi monitor. Các luồng khác được báo chờ đợi monitor. Một luồng mà monitor của
riêng nó có thể thâm nhập trở lại cùng monitor.
Mã đồng bộ
Tất cả các đối tượng trong Java được liên kết với các monitor (sự giám sát) của
riêng nó. Để đăng nhập vào monitor của một đối tượng, lập trình viên sử dụng từ khóa
synchronized (đồng bộ) để gọi một phương thức hiệu chỉnh (modified). Khi một luồng
đang được thực thi trong phạm vi một phương thức đồng bộ (synchronized), bất kỳ luồng
khác hoặc phương thức đồng bộ khác mà cố gắng gọi nó trong cùng thể nghiệm sẽ phải
đợi.
Chương trình 8.4 chứng minh sự làm việc của từ khóa synchronized (sự đồng bộ). Ở
đây, lớp “Target” (mục tiêu) có một phương thức “display()” (hiển thị) mà phương thức
này lấy một tham số kiểu số nguyên (int). Số này được hiển thị trong phạm vi các cặp ký
tự “< > # số # <>”. Phương thức “Thread.sleep(1000) tạm dừng luồng hiện tại sau khi
phương thức “display()” được gọi.
Thiết lập (khởi dựng) của liứp “Source” lấy một tham chiếu đến một đối tượng “t”
của lớp “Target”, và một biến số nguyên (integer). Ở đây, một luồng mới cũng được tạo
ra. Luồng này gọi phương thức run() của đối tượng “t”. Lớp chính “Synch” thể nghiệm lớp