스 레 드 가 안전 하고 스 레 드 가 안전 하지 않 은 것 이 무엇 입 니까?
1733 단어 자바 데이터 구조
오늘 여기 서 매듭 을 짓 겠 습 니 다.
, , , , , 。 。
,
개념:
코드 가 있 는 프로 세 스 에 여러 개의 스 레 드 가 동시에 실행 되 고 있 으 면 이 스 레 드 는 이 코드 를 동시에 실행 할 수 있 습 니 다.매번 실행 결과 가 단일 스 레 드 가 실 행 된 결과 와 같 고 다른 변수의 값 도 예상 한 것 과 같 으 면 스 레 드 가 안전 합 니 다.
또는 하나의 클래스 나 프로그램 이 제공 하 는 인 터 페 이 스 는 스 레 드 에 있어 원자 조작 이나 여러 스 레 드 간 의 전환 으로 인해 이 인터페이스의 실행 결과 에 이의 성 이 존재 하지 않 습 니 다. 즉, 우 리 는 동기 화 문 제 를 고려 하지 않 아 도 됩 니 다.
스 레 드 안전 문 제 는 모두 전역 변수 와 정적 변수 로 인해 발생 한다.
모든 스 레 드 에서 전체 변수, 정적 변 수 는 읽 기 동작 만 있 고 쓰기 동작 이 없 으 면 일반적으로 이 전체 변 수 는 스 레 드 가 안전 합 니 다.여러 개의 스 레 드 가 동시에 쓰기 작업 을 수행 하려 면 스 레 드 동기 화 를 고려 해 야 합 니 다. 그렇지 않 으 면 스 레 드 안전 에 영향 을 줄 수 있 습 니 다.
안전성:
예 를 들 어 하나의 Array List 류 는 하나의 요 소 를 추가 할 때 두 단계 로 완 성 될 수 있 습 니 다. 1. Items [Size] 의 위치 에 이 요 소 를 저장 합 니 다.2. Size 의 값 을 늘린다.
단일 스 레 드 가 실 행 된 경우 Size = 0 이면 하나의 요 소 를 추가 한 후 이 요 소 는 위치 0 이 고 Size = 1 입 니 다.
만약 에 다 중 스 레 드 상황 에서 예 를 들 어 두 개의 스 레 드 가 있 으 면 스 레 드 A 는 먼저 요 소 를 위치 0 에 저장 합 니 다.그러나 이때 CPU 스케줄 러 A 가 일시 정지 되 고 스 레 드 B 가 실 행 될 기 회 를 얻 습 니 다.스 레 드 B 도 이 ArrayList 에 요 소 를 추가 합 니 다. 이때 Size 는 0 과 같 기 때 문 입 니 다. (주의 하 세 요. 우 리 는 하나의 요 소 를 추가 하 는 것 은 두 단계 가 필요 하 다 고 가정 합 니 다. 스 레 드 A 는 절차 1 만 완 료 했 기 때문에 스 레 드 B 도 요 소 를 위치 0 에 저장 합 니 다.그 다음 에 스 레 드 A 와 스 레 드 B 가 계속 실행 되 고 모두 Size 의 값 을 증가 합 니 다.
좋 습 니 다. Array List 의 상황 을 살 펴 보 겠 습 니 다. 요 소 는 실제로 하나 밖 에 없 는데 위치 0 에 저장 되 어 있 지만 Size 는 2 와 같 습 니 다.이것 이 바로 '라인 이 안전 하지 않다' 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 범 형 실현 의 양 방향 링크데이터 구조 링크 에 대한 상세 한 설명 은 이동 하 십시오. 링크 및 관련 함수 구현 자바 가 실현 하 는 일반 양 방향 링크 는 참고 할 수 있 습 니 다. 자바 가 실현 한 양 방향 링크 링크 일반적인 도입 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.