2011-08-09 2 views
0

Java는 오브젝트 레벨 모니터를 지원합니다. 그래서 클래스의 인스턴스를 만들 때 기본적으로 다른 객체를 만듭니다. 이제 개체의 메서드를 통해 개체의 모든 인스턴스가 액세스하는 공유 데이터가있는 시나리오를 생각해보십시오.Java에서 모니터를 사용하여 제외를 수행하는 방법

동기화 된 키워드를 사용하면 같은 클래스의 다른 인스턴스 (개체)가 있기 때문에 스레드 안전성을 얻을 수있는 방법을 알려주세요.

답변

2

이 경우 인 개체를 동기화 할 수 있습니다.

데이터 조각에 액세스하는 100 개의 Foo 인스턴스가있는 경우 해당 데이터에는 단일 참조가 있습니다. 참조 바를 호출 할 수 있습니다. 그런 다음 모든 Foos는 동기화하면서 Bar에 액세스합니다. 클래스의 모든 인스턴스 데이터의 조각을 액세스하는 경우

void changeBar(){ 
    synchronized(bar){ 
    //insert logic here 
    } 
} 
0

, 당신이 static 회원 이용 될 수 있습니다

:이 경우

public class Foo { 
    private static Object shared; 

    public static void accessShared() { /* code */ } 
} 

을, 당신은 static 방법 synchronized을 만들 수 있습니다

public class Foo { 
    private static Object shared; 

    public static synchronized void accessShared() { /* code */ } 
} 

이것은 코드와 동일합니다.

public class Foo { 
    private static Object shared; 

    public static void accessShared() { 
    synchronized (Foo.class) { /* code */ } 
    } 
} 

기억하십시오. Foo.class은 그 자체로 하나의 객체이며 따라서 그에 연결된 모니터가 있습니다.

관련 문제