Trong môi trường đa luồng, hai hoặc nhiều luồng có thể truy cập đồng thời các tài nguyên được chia sẻ, điều này có thể dẫn đến hành vi không nhất quán của hệ thống. Java sử dụng khái niệm khóa để hạn chế truy cập đồng thời các tài nguyên hoặc đối tượng được chia sẻ. Các khóa có thể được áp dụng ở hai cấp độ -
- Object Level Locks - Nó có thể được sử dụng khi bạn muốn phương thức không tĩnh hoặc khối không tĩnh của mã chỉ được một luồng truy cập.
- Khóa Cấp độ Lớp - Nó có thể được sử dụng khi chúng ta muốn ngăn nhiều luồng nhập vào khối được đồng bộ hóa trong bất kỳ trường hợp nào có sẵn trong thời gian chạy. Nó phải luôn được sử dụng để làm cho chuỗi dữ liệu tĩnh an toàn.
Sr. Không. | Phím | Khóa Cấp độ Đối tượng | Khóa Cấp độ Lớp học |
---|---|---|---|
1 | Cơ bản | Nó có thể được sử dụng khi bạn muốn phương thức không tĩnh hoặc khối không tĩnh của mã chỉ được truy cập bởi một luồng | Nó có thể được sử dụng khi chúng ta muốn ngăn nhiều luồng nhập vào khối được đồng bộ hóa trong bất kỳ trường hợp nào có sẵn trong thời gian chạy |
2 | Tĩnh / Không tĩnh | Nó phải luôn được sử dụng để làm cho chuỗi dữ liệu không tĩnh được an toàn. | Nó phải luôn được sử dụng để làm cho chuỗi dữ liệu tĩnh được an toàn.
|
3 | Số lượng khóa | Mọi đối tượng trong lớp có thể có khóa riêng của chúng | Nhiều đối tượng của lớp có thể tồn tại nhưng luôn có sẵn khóa đối tượng của một lớp |
Ví dụ về Khóa cấp độ lớp
public class ClassLevelLockExample { public void classLevelLockMethod() { synchronized (ClassLevelLockExample.class) { //DO your stuff here } } }
Ví dụ về Khóa mức đối tượng
public class ObjectLevelLockExample { public void objectLevelLockMethod() { synchronized (this) { //DO your stuff here } } }