đoạn Mã - 1Đồng bộ hóa quyền truy cập vào đối tượng Immutable Integer
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
@Override
public void run()
{
synchronized (nRequests)
{
nRequests++;
}
}
}
đoạn Code - 2
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
private static Object lock = new Object();
@Override
public void run()
{
synchronized (lock)
{
nRequests++;
}
}
}
Trong khi đoạn mã thứ hai đang làm việc tốt mà không gây ra bất kỳ điều kiện chủng tộc, các đầu tiên không thành công trong việc đồng bộ hóa quyền truy cập vào thành viên dữ liệu tĩnh giữa các phiên bản khác nhau của cùng một lớp (RequestObject). Ai đó có thể ném thêm ánh sáng vào điều này. Tôi muốn hiểu tại sao phương pháp đầu tiên không hiệu quả.
Triển khai ban đầu của tôi là triển khai đầu tiên. Sau đó tôi nhìn thấy trong https://stackoverflow.com/a/2120409/134387.
Vì 'Integer' là không thể thay đổi. Tăng nó không làm những gì bạn nghĩ rằng –
cũng không sử dụng Integer, sử dụng 'int' –
Đây là một câu hỏi khác. Hãy làm cho nó một câu hỏi mới. –