테이블이있는 싱글 톤 개체 (클래스)가 있습니다 (해시 맵). 다른 모든 개체 (클라이언트)는 테이블에 저장된 다른 클라이언트의 목록을 읽습니다. 테이블을 사용하는 모든 메소드는 synchronized 키워드로 둘러 쌓여 있습니다. 다른 클라이언트에 대해 테이블의 값이 다른 상황을 디버깅했습니다. 클라이언트는 동기화 된 키워드를 추가 한 이유와 동일한 스레드에서 실행되고있을 수도 있고 실행되지 않을 수도 있습니다.자바 동기화 및 공유 테이블
Client temp=AppInterface.getInstance().getAppNetworkLogic().getFromConnectedClients(key);
AppNetowrkLogic
가 AppInterface
싱글과 내부 목적 : 나 클라이언트 개체 내부 테이블에 액세스하는 방법
public synchronized Client addToConnectedClients(long key, Client client)
{
return allConnectedClients.put(key, client);
}
public synchronized Client getFromConnectedClients(long key)
{
return allConnectedClients.get(key);
}
public synchronized Client removeFromConnectedClients(long key)
{
return allConnectedClients.remove(key);
}
은 여기
는 해시 맵을 사용하는 방법이고AppInterface
이 만들어 질 때입니다.
어떻게 이런 일이 발생할 수 있는지 잘 모르겠습니다.
편집 :
private static AppInterface instance=null;
public static AppInterface getInstance()
{
if(instance == null)
{
instance= new AppInterface();
}
return instance;
}
에 대한 액세스를 동기화? 거기에 경쟁 조건이 의심됩니다. – shazin
나는 이것이 현재 싱글 톤 패턴이 enum 인 이유라고 생각한다. –