Java 클래스 멤버 변수들의 초기화 순서
1. static 변수 선언부 : 클래스가 로드 될 때 (메모리 모델상 Methd area 에 올라감)
변수가 제일 먼저 초기화 됨
2. 필드 변수 선언부 : 객체 생성 될 때 (메모리 모델상 Heap area에 올라감)
생성자 block 보다 앞서 초기화 함
3. 생성자 block : 객체 생성 될 때 (메모리 모델상 Heap area에 올라감)
JVM이 내부적으로 locking (thread safe 영역임)
필드 변수 중 final 변수의 가시화는 (다른 스레드에 공개하는 시점은) 생성자 block이 끝난 다음.
필드 변수 선언부에서 이미 초기화 되었다면 그 값들은 덮어 씀
초기화 시점
* 클래스변수의 초기화시점 : 클래스가 처음 로딩될 때 단 한번 초기화 된다.
* 인스턴스변수의 초기화시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.
초기화 순서
* 클래스변수의 초기화순서 : 기본값 -> 명시적초기화 -> 클래스 초기화 블럭
* 인스턴스변수의 초기화순서 : 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자
'아는 만큼 보인다 > Concurrency' 카테고리의 다른 글
Executors.newCachedThreadPool()의 TIMED_WAITING 스레드 (0) | 2017.02.17 |
---|---|
Thread pool 에서 결과(Future) 받기 (0) | 2014.11.19 |
Thread 상태 (0) | 2014.11.19 |
Thread-Safe 를 위한 Keywords (0) | 2014.11.19 |
Executors 팩토리 클래스 (0) | 2014.11.18 |