>Java >java지도 시간 >Java 메모리 모델 및 스레드

Java 메모리 모델 및 스레드

伊谢尔伦
伊谢尔伦원래의
2016-11-26 09:28:001201검색

Java 메모리 모델

메인 메모리와 작업 메모리:

Java 메모리 모델은 모든 변수가 메인 메모리에 있고 각 스레드에는 자체 작업 메모리가 있다고 규정합니다.

작업 메모리는 스레드가 사용하는 기본 메모리의 복사본을 저장합니다. 스레드의 변수에 대한 모든 작업은 작업 메모리에서 수행되어야 합니다.

메모리 간 상호 작용:

1 잠금은 주 메모리의 변수에 작용하여 변수를 스레드 독점 상태로 식별합니다.

 2 Unlock 메인 메모리에 있는 변수에 작용하고, 잠긴 변수를 해제합니다.

 3 read 작업 메모리에 있는 변수에 작용하고, 변수의 값을 메인 메모리에서 스레드의 작업 메모리 중간으로 전송합니다.

 4 로드는 작업 메모리의 변수에 작용합니다. 읽기 작업으로 주 메모리에서 얻은 변수 값을 작업 메모리에 있는 변수의 복사본에 넣습니다.

 5 동작을 사용합니다. 작업 메모리 변수에 작업 메모리 변수의 값을 실행 엔진에 전달

 6 작업 메모리 변수에 작용을 할당, 실행 엔진에서 받은 값을 실행 엔진에 할당 작업 메모리

 7 함수 변수를 작업 메모리에 저장하고, 작업 메모리에 있는 변수의 값을 메인 메모리로 전송합니다.

 8 write는 메인 메모리에 있는 변수에 작용하며, store 연산으로 작업 메모리에서 얻은 변수의 값을 메인 메모리에 넣는다.

변수를 휘발성으로 정의하면 두 가지 기능이 있습니다

1. 이 변수는 모든 스레드에 표시되도록 보장됩니다. 비원자적 작업의 경우 여전히 스레드로부터 안전하지 않습니다.

 2 명령어 재정렬 최적화를 비활성화합니다.

원자성, 가시성 및 순서

선착순 원칙

Java 스레드의 상태 전이

New New Creation trailing edge가 변경되지 않았습니다. 시작됨 Purebred가 이 상태입니다

Running Runnable에는 운영 체제 스레드 상태의 Running 및 Ready가 포함됩니다. 이 상태의 스레드는 실행 중이거나 CPU가 실행 시간을 할당하기를 기다리고 있을 수 있습니다.

무기한 대기 이 상태의 대기 스레드에는 CPU 실행 시간이 할당되지 않으며 다른 스레드에 의해 명시적으로 깨어날 때까지 기다려야 합니다. Timeout 매개 변수를 설정하지 않고 Object.wait() 메서드 Thread.join( ) 메서드; LockSupport.park() 메서드

시간 초과 이 상태의 스레드에는 CPU 실행 시간이 할당되지 않지만 다른 스레드가 명시적으로 깨어날 때까지 기다릴 필요는 없습니다. 일정 시간이 지나면 시스템에 의해: Thread.sleep() 메소드, Timeout 매개변수가 설정된 Thread.join() 메소드, LockSupport.parkNanos() 메소드; ) 메소드

Blocked Blocked 단독 잠금 획득 대기

End Terminating 종료된 스레드의 스레드 상태


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.