Khi bạn thực hiện ThreadCounterDemo một vài lần bạn sẽ nhận thấy rằng các đầu ra là
đôi khi không phù hợp và thường không chính xác. Kể từ khi cả hai chủ đề thực hiện getAndIncrement ()
phương pháp 4 lần, giá trị cuối của Counter nên 8. Tuy nhiên, đôi khi giá trị cuối cùng không phải là 8
kể từ khi đề can thiệp với nhau và nhận được cùng một giá trị cho các đối tượng truy cập khi
họ thực hiện getAndIncrement ( ) cùng một lúc. Điều này cho thấy sự cần thiết của Mutual
Exclusion.
Trong Java, trừ lẫn nhau có thể được thực hiện ngầm bằng cách sử dụng các từ khóa đồng bộ hoặc
một cách rõ ràng thông qua ổ khóa (và cơ chế an toàn khác mà chúng ta sẽ xem xét sau).
Các từ khóa đồng bộ có thể được sử dụng để tạo điều kiện loại trừ lẫn nhau bởi kiểm soát quyền truy cập vào một
khối mã hoặc một phương pháp.
Khi một phương thức được khai báo một phương pháp đồng bộ, chỉ có một thread tại một thời điểm có thể truy cập toàn bộ
phương pháp và các chủ đề khác mà muốn truy cập phương thức phải chờ đợi cho đến khi thread hiện hành lá
các phương pháp. Một phương pháp được thay đổi thành một phương pháp đồng bộ bằng cách thêm các từ khóa đồng bộ
với đầu của phương pháp. Ngoài ra, chỉ là một phần của một phương pháp, hoặc một khối mã, có thể được
đồng bộ bằng cách dùng đồng bộ (này) {} xung quanh khối.
Đối với nhiệm vụ thứ hai của bạn, bạn nên thay đổi thực hiện của bạn nhiệm vụ 1 để thực thi loại trừ lẫn nhau
của getAndIncrement () phương pháp sử dụng từ khóa synchronized.
Hiển thị mã và thực hiện của bạn với một trợ lý giảng dạy để có được một nhãn hiệu và tải lên Counter.java đến
website CS đến thực hành 1 nhiệm vụ 2 hộp trình.
đang được dịch, vui lòng đợi..
