08_13 학습 노트

5232 단어
일반적인 학습
1. 무엇 입 니까
집합 에 저장 대상 은 유형 전환 의 번 거 로 운 절 차 를 방지 하고 실행 할 때 ClassCastException 이 나타 나 지 않도록 합 니 다.
2. 어떻게 일 하 는 지
형식 지우 기, 컴 파일 러 는 컴 파일 할 때 모든 유형 과 관련 된 정 보 를 지 웠 기 때문에 실행 할 때 어떠한 유형 과 관련 된 정보 도 존재 하지 않 습 니 다.
3. 일반적인 사용
  • 한정 어댑터, extends T >, super T >
  • 비 한정 어댑터 > 임의의 형식 으로 대체 할 수 있 습 니 다
  • Array 에서 범 형 을 사용 할 수 없습니다.

  • 용기 학습
    디자인 모드
  • 교체 기 모드, list 통과, Iterable, 교체 실현;
  • 어댑터 모드, Arrays. asList, Arrays 를 LIst 로 전환 합 니 다.

  • ArrayList 분석
  • 초기 크기 는 10
  • 1.5 배 확장, Arrays. copyOf (), oldCapacity + (oldCapacity >> 1)
  • 삭제 와 마찬가지 로 복잡 도 O (n)
  • Fail - Fast, modCount 는 구조 변화 횟수 를 기록 하고 반복 적 으로 직렬 화 된 상황 에서 조작 전후의 modCount 를 비교 하고 바 뀌 면 던 집 니 다. Concurrent ModificationException
  • 직렬 화 되 고 transient 수식 은 직렬 화 되 지 않 습 니 다.

  • Vector
    구별:
  • vector 는 동기 화
  • 두 배로 확대 한다.

  • 대안
  • Collections.synchronizedList();
  • CopyOnWriteArrayList
  • 많이 읽 고 적 게 쓴다.
  • 메모리 사용량, 데이터 일치 하지 않 음

  • HashMap
    링크 배열, 배열 의 모든 칸 은 링크 입 니 다. hash 충돌 이 발생 하면 충돌 을 링크 에 추가 합 니 다.
  • transient Entry[] table;
    링크 유형의 배열
  • 지퍼 법 으로 충돌 을 해결 하고 같은 링크 에 해시 값 과 산열 통 취 모 연산 결과 가 같은 Entry (남 은 숫자 제외)
  • 를 저장 합 니 다.
    hash 충돌 을 해결 하 는 세 가지 방법:
    1.    ,
        1.          ;
        2.        
    2.      
        1.   ,  ,    
    3.  hash ;

    HashMap 분석
  • 크기 는 기본적으로 16
  • 입 니 다.
  • 1.8 이후 Table 의 기본 크기 는 64 보다 작 지 않 고 링크 길이 가 8 일 때 빨간색 과 검은색 나무 로 바 뀌 었 습 니 다.플러그 인 사용 하지 않 기;

  • ConcurrentHashMap
  • segement 세그먼트, 기본 16, 안에 포 함 된 kv 수 를 기록 합 니 다.
  • size 작업 은 segement 에 포 함 된 kv 대수 만 통계 하면 됩 니 다.기본적으로 세 번 시도 하기;

  • 병발 하 다
    스 레 드 상태
  • 새로 만 들 기,
  • 실행 가능
  • 차단
  • 무한 대기
  • 기한 내 대기: 차단, 수면;
  • 사망
  • 쓰다
  • Runnable 인터페이스 실현;
  • Callable 인 터 페 이 스 를 실현 합 니 다.
  • Thread 류 를 계승 합 니 다.start 재 작성 run () 방법의 스 레 드 시작
  • 스 레 드 기초 메커니즘
  • Executor

  • 주로 세 가지 Executor 가 있 습 니 다.
  • CachedThreadPool: 하나의 작업 이 스 레 드 를 만 듭 니 다.
  • Fixed ThreadPool: 모든 작업 은 고정 크기 의 스 레 드 만 사용 할 수 있 습 니 다.
  • Single ThreadExecutor: 크기 가 1 인 Fixed ThreadPool 에 해당 합 니 다.
  • Daemon 데 몬 스 레 드 는 프로그램 이 실 행 될 때 배경 에서 서 비 스 를 제공 하 는 스 레 드 입 니 다
  • Sleep 휴면 현재 스 레 드, interrupted Exception
  • 을 던 질 수 있 습 니 다.
  • yield 는 같은 우선 순위 의 다른 스 레 드 운행 을 권장 합 니 다
  • 인 터 럽 트
    interrupt
    interepted
    상호 배척 동기 화
  • synchronized
  • ReentrantLock

  • 비교 하 다.
    1. 자물쇠 의 실현
    synchronized 는 JVM 이 이 루어 졌 고 ReentrantLock 은 JDK 가 이 루어 졌 다.
    2. 성능
    새 버 전의 자바 는 synchronized 에 대해 많은 최 적 화 를 진행 했다. 예 를 들 어 자 회전 자물쇠 등 이다. synchronized 는 ReentrantLock 과 대체적으로 같다.
    3. 대기 중단 가능
    자 물 쇠 를 가 진 스 레 드 가 오랫동안 자 물 쇠 를 풀 지 않 을 때 기다 리 고 있 는 스 레 드 는 기다 림 을 포기 하고 다른 일 을 처리 하 는 것 으로 바 꿀 수 있 습 니 다.
    ReentrantLock 은 중단 할 수 있 지만 synchronized 는 안 됩 니 다.
    4. 공평 자물쇠
    공정 자 물 쇠 는 여러 스 레 드 가 같은 자 물 쇠 를 기다 리 는 동안 자 물 쇠 를 신청 하 는 시간 순서에 따라 순서대로 자 물 쇠 를 받 아야 한 다 는 것 을 말한다.
    synchronized 의 자 물 쇠 는 불공평 합 니 다. ReentrantLock 은 기본적으로 불공평 하지만 공평 할 수도 있 습 니 다.
    5. 여러 조건 잠 금 연결
    하나의 ReentrantLock 은 여러 Condition 대상 을 동시에 연결 할 수 있 습 니 다.
    동기 화 방안 없 음
  • 스 택 폐쇄: 같은 방법의 부분 변 수 는 가상 스 택 에 위치 하고 스 레 드 개인 에 속 합 니 다.
  • 스 레 드 로 컬 저장 (Thread Local Storage): 웹 응용 에서 ThreadLocal 은 스 레 드 로 컬 저장 기능 을 실현 합 니 다.
  • 코드 를 다시 입력 할 수 있 습 니 다. 쌓 여 있 는 데이터 와 공용 시스템 자원 에 의존 하지 않 고 사용 하 는 상 태 량 은 모두 매개 변수 에서 들 어 오고 다시 들 어 갈 수 없 는 방법 을 사용 하지 않 습 니 다.
  • JUC AQS
  • Countdown Latch 는 카운터 cnt 를 유지 하고 있 습 니 다. countDown () 방법 을 호출 할 때마다 카운터 의 값 을 1 로 줄 이 고 0 으로 줄 일 때 await () 방법 을 호출 하여 기다 리 는 스 레 드 가 깨 어 납 니 다.
  • CyclicBarrier

  • Countdown Latch 와 비슷 합 니 다. 모두 계수 기 를 유지 함으로써 이 루어 집 니 다. 스 레 드 가 await () 방법 을 실행 한 후에 계수 기 는 1 을 줄 이 고 기 다 립 니 다. 카운터 가 0 이 될 때 까지 모든 await () 방법 을 호출 하여 기다 리 는 스 레 드 가 계속 실 행 될 수 있 습 니 다.
  • Semaphore

  • Semaphore 는 운영 체제 의 신 호 량 과 유사 하여 상호 배척 자원 에 대한 접근 루트 수 를 제어 할 수 있다.
  • FutureTask
  • BlockingQueue
  • FIFO 대기 열: LinkedBlockingQueue, ArrayBlockingQueue (고정 길이)
  • 우선 순위 대기 열: Priority BlockingQueue

  • 자물쇠 최적화
  • 경량급 자물쇠
  • 자전거 자물쇠
  • 자물쇠 제거
  • 자물쇠 굵기
  • 편향 자물쇠
  • 자바 메모리 모델
    주 메모리 작업 메모리
    캐 시 일치 성: 스 레 드 읽 기와 쓰기 향상 을 위해 고속 캐 시 를 추가 합 니 다.
    메모리 간 상호작용
    여덟 가지 조작
  • read: 하나의 변수의 값 을 주 메모리 에서 작업 메모리 로 전송 합 니 다
  • load: read 이후 에 실행 하고 read 에서 얻 은 값 을 작업 메모리 의 변수 복사 본 에 넣 습 니 다
  • use: 작업 메모리 의 변수 값 을 실행 엔진 에 전달 합 니 다
  • assign: 실행 엔진 에서 받 은 값 을 작업 메모리 에 부여 하 는 변수
  • store: 작업 메모리 의 변수 값 을 주 메모리 로 전송 합 니 다
  • write: store 이후 에 실 행 됩 니 다. store 에서 얻 은 값 을 메 인 메모리 변수 에 넣 습 니 다
  • lock: 메 인 메모리 에 작용 하 는 변수
  • unlock

  • 메모리 3 대 특성
  • 원자 성, 조작의 원자 성;
  • 원자 류 AtomicInteger 등
  • synchronized
  • 메모리 간 의 상호작용 은 lock 과 unlock 입 니 다.
  • 가상 컴퓨터 구현 에 대응 하 는 바이트 코드 명령 은 Monitorenter 와 Monitorexit 이다.

  • 가시 성
  • 질서 성
  • volatile 메모리 장벽 추가 로 명령 재 촬영 금지
  • synchronized 는 매 시간 하나의 스 레 드 만 실행 되도록 보장 합 니 다
  • 좋은 웹페이지 즐겨찾기