- object 메서드
- garbage collector 가 호출 -> 인스턴스 해제 전



=========================================================================
중첩 클래스 (inner class)
- 클래스 내부에 선언하는 클래스
- 1) top lever inner class: static inner class
- 다른 클래스에서도 사용하기 위함.
- 2) member inner class
- outer 클래스의 인스턴스를 통해서만 사용 가능한 클래스
- 3) local inner class
- 해당 클래스가 선언된 블럭 내에서만 사용 가능한 클래스.
- 4) anonymous inner class
- 이름이 없는 클래스
- 클래스를 정의한 직후 바로 인스턴스 생성함.
- 오로지 한개의 인스턴스만 필요한 경우에 사용.
- 이름 없는 클래스 정의
new (슈퍼클래스 또는 인터페이스) () { 클래스 정의 }

* 일반 클래스의 명칭: 패키지 멤버 클래스.
* sleep(): 지정한 시간만큼 not runnable 상태로 만드는 것.
- cpu 쟁탈전에서 제외 시킴. (not runnable)
* 여러 스레드가 동시에 진입하여 같은 객체를 다룰 때 문제가 발생되는 코드.
=> critical section.
- 해결책 : 한번에 하나의 스레드 만이 접근할 수 있도록 한다.
- 번호표 나눠준다. ex) 화장실 키, 번호표
- 접근 가능 여부를 관리하기 위한 값 => mutual exclusion (= mutex:뮤텍스)
* 뮤텍스 방식
- 뮤텍스 방식은 오로지 1개의 스레드만이 접근 가능한 것.
- 1개만 가능한 세마포어
* semaphore(세마포어)
- 일정한 개수까지는 접근 가능하게 하는 방식.
* synchronized
- 한번에 하나의 스레드만이 진입 할 수 있게 하는 설정.
- synchronized로 설정된 블럭은 한번에 하나의 스레드 만이 접근 가능하다.
- 그러나 객체가 다르다면 동시 진입 가능하다.
- mutex(1개만 가능한 semaphore)는 같은 객체에 대해서 적용한다.