코드 - 1동기화 액세스
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
@Override
public void run()
{
synchronized (nRequests)
{
nRequests++;
}
}
}
코드 - 2
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
private static Object lock = new Object();
@Override
public void run()
{
synchronized (lock)
{
nRequests++;
}
}
}
두 번째 코드는 어떤 경쟁 조건을 일으키지 않고 잘 작동하는 동안, 먼저 동일한 클래스 (RequestObject)의 서로 다른 인스턴스간에 정적 데이터 멤버에 대한 액세스를 동기화하는 데 성공하지 못합니다. 누군가 더 많은 빛을 던질 수 있을까요? 왜 첫 번째 접근 방식이 작동하지 않는지 이해하고 싶습니다.
원본 구현이 첫 번째 구현입니다. 나중에 나는 https://stackoverflow.com/a/2120409/134387에서 보았다.
'정수'는 변경 불가능하기 때문에. 당신이 생각하는대로 증가시키지 않고있다. –
도 정수를 사용하지 않고,'int'를 사용한다. –
이것은 다른 질문이다. 새로운 질문으로 만드십시오. –