Java 동시 프로그래밍의 명시적 잠금에 대한 자세한 설명
명시적 잠금
1. 잠금 및 재진입 잠금
잠금은 무조건적이고 폴링 가능하며 시간에 맞춰 중단할 수 있는 잠금 획득 작업을 제공합니다. 모든 잠금 및 잠금 해제 방법은 명시적입니다.
ReentrantLock은 잠금을 구현하며 동기화된 것과 동일한 메모리 의미도 제공합니다. reentrant 잠금 의미론 제공
1. 기본 의미론:
void LockDefinition() { Lock lock = new ReentrantLock();try {//do someting//更新对象状态,捕获异常;并在必要时恢复不变性条件} finally {//finally中释放锁 lock.unlock(); } }
2. 폴링 잠금 및 시간 제한 잠금
lock.tryLock([Long,TimeUnit]): 잠금을 획득하려고 시도하면 시간은 다음과 같습니다. a timed lock
3. Interruptible lock 획득 연산
lock.lockInterruptously();
두 번째, 공정성
ReentrantLock은 공정한 잠금(잠금의 순차적 획득 요청)과 불공정한 잠금(큐 브레이킹)을 생성할 수 있습니다.
큐 점프: 스레드가 불공정한 잠금을 요청할 때 요청이 이루어질 때 잠금 상태가 사용 가능한 경우 이 스레드는 큐에 들어가지 않지만 큐에서 대기 중인 모든 스레드를 건너뛰고 잠금을 획득합니다.
참고: 불공정 잠금은 대기열 점프를 옹호하지 않지만 대기열 점프를 방지할 수는 없습니다. 반면 공정 잠금은 대기열에 배치되고 순차적으로 실행됩니다.
경쟁이 치열할 때 불공정 잠금은 공정 잠금보다 빠릅니다. 이유는 재개입니다. 대기열의 스레드 스레드 실행 시작 사이에 심각한 지연이 있습니다
3. 읽기-쓰기 잠금
ReentrantLock은 표준 뮤텍스 잠금이지만 다음과 같은 일부 시나리오에서는 읽기와 읽기가 병렬로 수행될 수 있지만 불가능합니다.
ReadWriteLock 읽기-쓰기 잠금: 구현 ReentrantReadWriteLock: readLock 및 writeLock 메서드
1. 상호 작용 및 구현 방법
릴리스 우선 순위: 쓰기 잠금이 해제되고 대기열에 읽기와 쓰기가 모두 있는 경우 읽어야 합니다. 아니면 요청하는 스레드에 우선순위를 부여하시겠습니까?
큐에서 읽기 스레드 점프: 현재 읽기 잠금을 기다리는 쓰기 잠금이 있는데, 후속 읽기 잠금이 대기열에서 점프하고 직접 읽어야 할까요? 직접 읽기는 동시성을 향상시키지만 쓰기 부족 및 획득 실패를 초래할 수 있습니다.
재진입: 읽기 잠금과 쓰기 잠금은 재진입이 가능합니까?
강등: 쓰기 잠금, 스레드의 잠금을 다운그레이드할 수 있도록 잠금을 해제하지 않고 읽기 잠금을 획득할 수 있나요?
업그레이드: 다른 대기 스레드보다 먼저 읽기 잠금을 쓰기 잠금으로 업그레이드할 수 있나요? 두 스레드가 동시에 쓰기 잠금을 업그레이드하려고 하면 교착 상태가 발생하기 쉽습니다
적용 대상: 주로 읽기 작업인 데이터 구조
위 내용은 Java 동시 프로그래밍의 명시적 잠금에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Python은 초보자에게 문제 해결 능력을 부여합니다. 사용자 친화적인 구문, 광범위한 라이브러리 및 변수, 조건문 및 루프 사용 효율적인 코드 개발과 같은 기능을 제공합니다. 데이터 관리에서 프로그램 흐름 제어 및 반복 작업 수행에 이르기까지 Python은 제공합니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Python은 배우기 쉽고 강력한 기능을 통해 초보자에게 이상적인 프로그래밍 입문 언어입니다. 기본 사항은 다음과 같습니다. 변수: 데이터(숫자, 문자열, 목록 등)를 저장하는 데 사용됩니다. 데이터 유형: 변수의 데이터 유형(정수, 부동 소수점 등)을 정의합니다. 연산자: 수학 연산 및 비교에 사용됩니다. 제어 흐름: 코드 실행(조건문, 루프) 흐름을 제어합니다.

C는 초보자가 프로그래밍을 배우기에 이상적인 언어이며 효율성, 다양성 및 이식성이 장점입니다. C 언어를 배우려면 다음이 필요합니다. C 컴파일러 설치(MinGW 또는 Cygwin 등) 변수, 데이터 유형, 조건문 및 루프문 이해 주 함수와 printf() 함수가 포함된 첫 번째 프로그램 작성 실제 사례를 통한 연습(예: 평균 계산) C 언어 지식

C는 초보자가 시스템 프로그래밍을 배우기에 이상적인 선택입니다. 여기에는 헤더 파일, 기능 및 주요 기능이 포함되어 있습니다. "HelloWorld"를 인쇄할 수 있는 간단한 C 프로그램에는 표준 입출력 함수 선언이 포함된 헤더 파일이 필요하며 인쇄하려면 기본 함수에서 printf 함수를 사용합니다. C 프로그램은 GCC 컴파일러를 사용하여 컴파일하고 실행할 수 있습니다. 기본 사항을 마스터한 후에는 데이터 유형, 함수, 배열 및 파일 처리와 같은 주제로 이동하여 능숙한 C 프로그래머가 될 수 있습니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Python 프로그래밍 시작하기 Python 설치: 공식 웹사이트에서 다운로드하여 설치하세요. HelloWorld!: 코드의 첫 번째 줄을 인쇄하려면 print("HelloWorld!")를 사용하세요. 실제 사례: 원의 면적 계산: π(3.14159)와 반지름을 사용하여 원의 면적을 계산합니다. 변수 및 데이터 유형: 변수를 사용하여 데이터를 저장합니다. Python의 데이터 유형에는 정수, 부동 소수점 숫자, 문자열 및 부울 값이 포함됩니다. 표현식 및 할당: 연산자를 사용하여 변수, 상수, 함수를 연결하고 할당 연산자(=)를 사용하여 변수에 값을 할당합니다. 제어 흐름: if-else 문: 조건에 따라 다른 코드 블록을 실행하고 홀수를 결정합니다.

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
