중화사전망 - 서예자전 - 스레드 안전 분석?

스레드 안전 분석?

Java 프로그래밍 언어를 배우는 과정에서 스레드, 스레드 풀 등 관련 기술 지식을 습득했습니다. 오늘 북경대학교 파랑새 호잉 컴퓨터학원에서 스레드 안전을 간단히 소개해 드리겠습니다. 한번 봅시다.

스레드 보안은 다중 스레드 액세스에서 잠금 메커니즘을 사용하는 것을 의미합니다. 한 스레드가 해당 클래스의 데이터에 액세스하면 해당 데이터가 보호되고 해당 스레드가 읽기를 완료할 때까지 다른 스레드가 해당 데이터에 액세스할 수 없습니다. 데이터 불일치 또는 데이터 오염은 발생하지 않습니다.

스레드 불안정은 데이터 액세스 보호 기능이 제공되지 않으며 여러 스레드가 지속적으로 데이터를 변경함으로써 더티 (dirty) 데이터가 발생할 수 있음을 의미합니다.

스레드 안전 고려 시기:

객체에 스레드 보안이 필요한지 여부는 객체가 여러 스레드에서 액세스되는지 여부에 따라 달라집니다. 이것은 프로그램에서 객체에 액세스하는 방법이며, 객체가 구현하고자 하는 기능이 아닙니다. 객체 스레드를 안전하게 하려면 동기화 메커니즘을 사용하여 객체의 소프트 상태에 대한 액세스를 조정해야 합니다. Java 에서 일반적으로 사용되는 동기화 메커니즘은 Synchronized 이며 volatile 유형의 변수, 표시 잠금 장치 및 원자 변수도 포함되어 있습니다. 다중 스레드에서 동일한 클래스에 동시에 액세스할 경우 각 실행의 결과는 단일 스레드와 동일하며 변수 값은 예상과 동일하므로 스레드는 안전합니다.

잠금 특성

잠금 메커니즘의 두 가지 특징:

상호 배제: 한 번에 하나의 스레드만 하나의 객체에 대한 잠금을 보유할 수 있습니다. 이 기능을 통해 멀티 스레딩의 조정 메커니즘이 구현되어 한 번에 하나의 스레드만 동기화할 코드 블록 (복합 작업) 에 액세스할 수 있습니다. 상호 배제, 우리는 종종 조작의 원자성이라고 부른다.

가시성: 잠금을 해제하기 전에 * * * 공유 변수에 대한 변경 사항이 이후에 잠겨 있는 다른 스레드에 표시되는지 확인해야 합니다. 그렇지 않으면 다른 스레드가 로컬 캐시 복사본에 대해 계속 작업하여 불일치가 발생할 수 있습니다.

일시 중지, 휴면, 차단 및 비차단

일시 중지: 스레드가 일시 중지되면 다른 스레드 (사용자 스레드 또는 디버그 스레드) 에 의해 깨어날 때까지 CPU 사용 시간이 손실됩니다.

휴면: CPU 사용 시간도 손실되지만 지정된 휴면 시간 후에 자동으로 활성화되므로 깨우지 않아도 됩니다 (전체 깨우기는 자동으로 보이지만 실제로는 데몬 스레드가 깨워야 합니다. 프로그래머의 수동 개입은 필요하지 않습니다).

차단: 스레드가 실행 중일 때 필요한 리소스를 얻을 수 없으므로 작업 조건이 충족될 때까지 스레드가 일시 중지됩니다.

비차단: 스레드가 실행 중일 때 필요한 리소스를 얻을 수 없으므로 스레드가 대기를 일시 중지하지 않고 다른 작업을 계속합니다. 대기 조건이 충족되면 실행 전에 알림을 받습니다 (데몬 스레드도 마찬가지임).