좋은 사람들! 이 기사에서는 Java 동시 구현 원칙의 JDK 소스 코드 분석에 대해 설명합니다 (PDF 문서).

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

머리말

동시 프로그래밍을위한 다중 프로세스, 다중 스레드 및 다중 코 루틴 옵션이 있습니다. Java의 경우 운영 중에 여러 프로세스를 "포크"하기 위해 Linux 시스템 API를 호출하는 C ++와 같지 않으며 기본적으로 Go와 같은 언어 수준에서 여러 코 루틴을 제공하지도 않습니다. Java에서 동시성은 다중 스레드 모델입니다.

인간 두뇌의 인식을 위해 "행별 코드"는 물론 이해하기 가장 쉽습니다. 그러나 멀티 스레딩에서는 여러 스레드의 코드가 교차 및 병렬로 연결되어 상호 배타적 인 리소스에 액세스하고 서로 통신해야합니다. 개발자는 스레드 간의 상호 배제 및 동기화를 신중하게 설계해야하며,주의하지 않으면 스레드로부터 안전하지 않은 코드를 작성하게됩니다. 이러한 이유로 멀티 스레드 프로그래밍은 항상 광범위하고 깊이 논의 된 분야였습니다.

JDK 1.5가 출시되기 전에 Java는 언어 수준에서 몇 가지 간단한 스레드 상호 배제 및 동기화 메커니즘, 즉 동기화 된 키워드 인 대기 및 알림 만 제공했습니다. 복잡한 다중 스레드 프로그래밍 시나리오가 발생하는 경우 개발자는 이러한 간단한 메커니즘을 기반으로 복잡한 스레드 동기화 문제를 해결해야합니다. JDK 1.5 이후로 동시 프로그래밍 마스터 인 Doug Lea는 체계적이고 포괄적 인 동시 프로그래밍 프레임 워크 인 JDK Concurrent 패키지를 제공했습니다. 여기에는 다양한 원자 연산, 스레드로부터 안전한 컨테이너, 스레드 풀 및 비동기 프로그래밍이 포함됩니다.

이 기사는 JDK 7 및 JDK 8을 기반으로 전체 Concurrent 패키지에 대한 포괄적 인 소스 코드 분석을 수행합니다. JDK 8에서 대부분의 동시성 기능 구현은 JDK 7과 동일하지만 몇 가지 추가 기능이 추가되었습니다. 예를 들어 CompletableFuture, ConcurrentHashMap, StampedLock, LongAdder 등의 새로운 구현입니다.

전체 Concurrent 패키지의 소스 코드 분석의 목적은 다음과 같습니다.

  • (1) 사용자가 합리적으로 솔루션을 선택할 수 있도록 지원합니다. Concurrent 패키지는 방대하며 다양한 스레드 제외 및 동기화 메커니즘이 있습니다. 구현 원칙을 이해하고 사용자는 자신의 비즈니스 시나리오에 따라 가장 적합한 솔루션을 선택할 수 있습니다. 바퀴를 다시 만드는 것을 피하고 부적절한 사용으로 인해 "구덩이"에 빠지지 않도록하십시오.
  • (2) 소스 코드 분석을 통해 사용자는 메모리 장벽, CAS 원자 작업, 잠금 및 잠금 해제의 기본 원칙을 이해할 수 있으며 더 이상 "역설적"단계에 머 무르지 않고 그 본질을 깊이 이해할 수 있습니다.
  • (3) 주인의 생각을 흡수하십시오. Concurrent 패키지에서 다양한 현명한 동시 처리 전략을 볼 수 있습니다. Concurrent 패키지를 살펴보면 멀티 스레딩에는 단순한 뮤텍스 잠금, 알림 메커니즘 및 스레드 풀만있는 것이 아니라는 것을 알 수 있습니다.

이 기사는 멀티 스레딩의 기초부터 시작하여 점차적으로 전체 Concurrent 패키지를 살펴 봅니다. 이 책을 읽은 후에는 멀티 스레딩 원칙과 다양한 동시 설계 원칙에 대해 포괄적이고 심오하게 이해하게됩니다.

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

1 장 멀티 스레딩 기초

  • 1.1 스레드의 정상적인 종료
  • 1.2 InterruptedException () 함수 및 인터럽트 () 함수
  • 1.3 동기화 된 키워드
  • 1.4 대기 () 与 통지 ()
  • 1.5 휘발성 키워드
  • 1.6 JMM 이전에 발생
  • 1.7 메모리 장벽
  • 1.8 최종 키워드
  • 1.9 포괄적 인 애플리케이션 : 잠금없는 프로그래밍

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

2 장 원자 클래스

이 장부터 시작하여 그림과 같이 전체 Concurrent 패키지의 계층 구조를 간단한 것부터 복잡한 것까지, 아래에서 위로 단계적으로 분석합니다.

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

  • 2.1 AtomicInteger와 AtomicLong
  • 2.2 AtomicBoolean 및 AtomicReference
  • 2.3 AtomicStampedReference 및 AtomicMarkableReference
  • 2.4 AtomicIntegerFieldUpdater, AtomicLongFieldUpdater 및 AtomicReferenceFieldUpdater
  • 2.5 AtomicIntegerArray, AtomicLongArray 및 Atomic-ReferenceArray
  • 2.6 Striped64 및 LongAdder

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

3 장 잠금 및 조건

  • 3.1 뮤텍스
  • 3.2 읽기-쓰기 잠금
  • 3.3 조건
  • 3.4 StampedLock

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

4 장 동기화 도구

잠금 및 조건 외에도 Concurrent 패키지는 일련의 동기화 도구도 제공합니다. 이러한 동기화 도구의 원칙 중 일부는 AQS를 기반으로하고 일부는 특수 구현 메커니즘을 필요로합니다.이 장에서는 모든 동기화 도구의 구현 원칙을 분석합니다.

  • 4.1 세마포어
  • 4.2 카운트 다운 래치
  • 4.3 CyclicBarrier
  • 4.4 교환기
  • 4.5 페이저

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

5 장 동시 컨테이너

Lock 및 Phaser 구현에서 잠금없는 대기열과 CAS 기반의 잠금없는 스택이 도입되었습니다. 이 장에서는 Concurrent 패키지에서 제공하는 다양한 동시 컨테이너를 포괄적으로 소개합니다.

  • 5.1 BlockingQueue
  • 5.2 BlockingDeque
  • 5.3 CopyOnWrite
  • 5.4 ConcurrentLinkedQueue / 덱
  • 5.5 ConcurrentHashMap
  • 5.6 ConcurrentSkipListMap / 세트

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

6 장 스레드 풀과 미래

  • 6.1 스레드 풀의 실현 원리
  • 6.2 스레드 풀의 클래스 상속 시스템
  • 6.3 ThreadPoolExector
  • 6.4 Callable 与 미래
  • 6.5 ScheduledThreadPoolExecutor
  • 6.6 실행 도구

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

7 장 ForkJoinPool

  • 7.1 ForkJoinPool 사용
  • 7.2 핵심 데이터 구조
  • 7.3 작업 훔치기 대기열
  • 7.4 ForkJoinPool 상태 제어
  • 7.5 작업자 스레드 웨이크 업 메커니즘 차단
  • 7.6 작업 제출 프로세스 분석
  • 7.7 작업 도용 알고리즘 : 작업 실행 프로세스 분석
  • 7.8 ForkJoinTask의 fork / join
  • 7.9 ForkJoinPool의 우아한 폐쇄

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

8 장 완성 가능한 미래

JDK 8부터 강력한 비동기 프로그래밍 도구 인 CompletableFuture가 Concurrent 패키지에 제공됩니다. JDK8 이전에는 스레드 풀과 Future를 통해 비동기 프로그래밍이 가능했지만 기능이 충분히 강력하지는 않습니다. CompletableFuture의 출현은 Java의 비동기 프로그래밍 기능을 크게 발전 시켰습니다. CompletableFuture의 원리를 논의하기 전에 CompletableFuture의 사용법에 대해 자세히 살펴 보겠습니다. 이러한 사용법을 통해 이전 Future에 비해 개선 된 기능을 확인할 수 있습니다.

  • 8.1 완료 가능한 향후 사용
  • 8.2 네 가지 미션 프로토 타입
  • 8.3 CompletionStage 인터페이스
  • 8.4 CompletableFuture의 내부 원칙
  • 8.5 메시 작업 실행 : 방향성 비순환 그래프
  • 8.6 allOf 내부 계산 그래프 분석

 

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

기사의 길이로 인해 전체 문서를 업로드 할 수 없으며 일부만 여기에 업로드 할 수 있습니다. 도움이 필요한 친구는 "VX Assistant"를 추가하여 무료로받을 수 있습니다.

학습 후 잃지 않도록!  자바 동시 구현 원리의 JDK 소스 코드 분석

 

 

추천

출처blog.csdn.net/a159357445566/article/details/109096838