synchronized 키워드 사용법

1246 단어 java 기초
synchronized는 일반적으로 다중 라인의 공유 자원에 사용되는데 synchronized 방식을 제외하고 lock,condition,volatile,threadlocal,atomicInteger,cas 등 방식도 있다.
코스메틱 객체는 다음과 같습니다.
  • 하나의 클래스를 수식하는데 그 작용의 범위는synchronized 뒤에 괄호로 묶인 부분이고 작용의 대상은 이 클래스의 모든 대상이다.
  • 수식하는 방법은 수식하는 방법을 동기법이라고 하는데 그 작용의 범위는 전체 방법이고 작용의 대상은 이 방법을 사용하는 대상이다.
  • 정적 방법을 수정하는데 그 작용의 범위는 전체 정적 방법이고 작용의 대상은 이 유형의 모든 대상이다.
  • 하나의 코드 블록을 수식하는데 수식된 코드 블록을 동기화 문장 블록이라고 하는데 그 작용 범위는 괄호 {}로 묶인 코드이고 작용 대상은 이 코드 블록을 호출하는 대상이다.

  • synchronized는 비교적 거친 잠금장치인데 특히 전체 대상이나 전체 클래스에 잠금을 할 때이다.예를 들어, HashTable은 HashMap의 스레드 보안 버전에 해당합니다.구현은 다음과 같습니다.
    public synchronized V get(Object key) {
        Hashtable.Entry,?> tab[] = table;
        int hash = key.hashCode();
        int index = (hash & 0x7FFFFFFF) % tab.length;
        for (Hashtable.Entry,?> e = tab[index]; e != null ; e = e.next) {
            if ((e.hash == hash) && e.key.equals(key)) {
                return (V)e.value;
            }
        }
        return null;
    }

    JDK에서 Collections는 스레드가 안전하지 않은 집합을 선형 안전한 집합으로 바꿀 수 있는 방법이 있는데 이것은 이렇게 실현된다.
    public static  Collection synchronizedCollection(Collection c) {
        return new SynchronizedCollection<>(c);
    }

    좋은 웹페이지 즐겨찾기