자바 프로그램에서는 멀티 스레드의 안전한 작동을 보장하기 위해?

보안 스레드에 반영됩니다 :

  • 자성 : CPU의 실행 중에 하나 이상의 작업이 중단되지 않습니다 특성
  • 가시성 : 공유 변수 스레드를 수정, 다른 스레드는 즉시 볼 수 있습니다
  • 주문 : 주문 코드에서 수행되는 프로그램의 실행 순서

보안 문제 스레드 원인 :

  • 캐시 원인 가시성 문제
  • 문제 원자 원인 스레드 스위치
  • 컴파일러 최적화 문제 발생 질서

자바 솔루션에 의해 제공 :

  • - 아톰 JDK 원자는 자성의 문제를 해결, LOCK, 동기화 할 수 있습니다 시작
  • 휘발성, LOCK 동기화, 가시성 문제를 해결할 수
  • 발생-전에 주문 규칙이 문제를 해결할 수 있습니다

발생-전에 규칙 :

  코드를 최적화 JVM이 컴파일되어 있기 때문에, 상황의 명령 재정렬 동시 프로그래밍 컴파일러 최적화의 안전을 피하기 영향하려면 어떻게-전에 규칙이 동시 프로그래밍의 정확성을 보장하기 위해 컴파일러 최적화 시나리오를 금지 정의 할 필요가있을 것입니다.

  1. 프로그램 순서 규칙 : 프로그램 코드의 순서에 따라 스레드를 의미, 후자 위의 코드의 결과는 코드 실행을 볼 수 있습니다.
  2. 이행 성 규칙 : 이행 성, A가 일어나기 전에 경우-B에, B 발생 전에-C에 대한, 다음 일어나도 전에 C. 수단 이 잘 이해된다. B에 대한 (A)의 연산 결과가 표시되는 경우, 즉, 보이는 흰색 단어와 C의 연산 결과는 B, C에 연산 결과 (A)는 또한 볼 수있다.
  3. 휘발성 변수 규칙은 : 휘발성 변수에 쓰기 작업을 의미됩니까-전에 휘발성 변수의 연속 읽기 작업.
  4. 잠금 해제는 어떻게됩니까-전에에있는 잠금 이후의 잠금 의미합니다.
  5. 스레드 (시작) 규칙 : 스레드 B A 프로모터 후 메인 쓰레드로 지칭 서브 스레드 B는 메인 스레드 B. 스레드를 시작하기 전에 동작을 확인할 수
  6. () 결합 규칙 쓰레드 일어나도 전에 스레드 B 인터럽트 이벤트를 검출하기 위해, 스레드 B () 메소드를 호출하는 스레드 인터럽트를 말한다 (즉, Thread.interrupted () 메소드). 이것은 매우 쉽게 이해하는 것도있다.
  7. () 규칙 인터럽트 스레드 :하는 스레드 B () 메소드 인터럽트 호출 스레드 지칭 일어나도 전에 스레드 B (Thread.interrupted () 방법) 인터럽트 이벤트를 검출. 이것은 매우 쉽게 이해하는 것도있다.
  8. 마무리 () 규칙 : 시작이 발생-전에 마무리 () 메서드를 종료, 객체 생성자의 실행을 의미합니다.

추천

출처www.cnblogs.com/jxxblogs/p/11884679.html