-
2월 19일 토요일 보강으로 스레드 관련 강의를 들었다.
Process
- Process란 실행중인 program을 말한다.
- 프로그램을 실행시키려면 OS로부터 resource를 할당받아야 한다.
- Resource 4가지
- Code
- Data(static variable)
- Heap(동적 할당 메모리 영역)
- Call Stack(method 호출에 대한 지역변수 관리)
- resource만 가지고 프로그램을 실행시킬 수는 없고, 프로그램을 수행시키는 주체가 필요한데 그게 Thread !
Thread
- Process는 resource와 thread로 구성되어 있는데, 그 중 thread는 single thread program과 multi thread program으로 만들 수 있다.
- Java에서 Thread는 Instance(객체)기 때문에 Class를 정의해서 사용한다.
Thread 만드는 방법
1. Thread class를 상속하는 방법
- run을 Override해서 사용
2. Runnable interface를 구현하는 방법 ( 이 방법을 주로 사용하는데, 상속은 단일상속만 지원하고 상속하면 class간 tightly coupled되기 때문)
- run을 Override해서 사용
Thread의 상태 전이
- 객체를 만들어서 start() 시킨다.
- Thread가 runnable 상태로 변한다.
- JVM이 가지고 있는 Thread Scheduler에 의해 Thread가 running한다. (run method 실행)
- run() 메서드가 complete되면 Thread는 dead한다.
=> Java 프로그램은 process 안에 있는 사용중인 모든 thread가 종료되면 프로그램이 종료된다!
Multi Core CPU 경우 Thread 실행제어
purpose) 효율적인 프로그램 작성
method를 이용해서 Thread의 Scheduling 제어하기
1. sleep(milliseconds)
- 지정된 시간동안 Thread 수행을 멈춘다.
- sleep하는 동안 thread에 interrupt()을 실행시킬 수도 있기 때문에 반드시 예외처리 필수!
2. interrupt()
- 특정 Thread에 interrupt()를 걸어서 exception 발생시키고 Interrupted state를 변경한다.
- interrupt()가 호출되었는지 확인하는 메서드 (됐으면 true, 그렇지 않으면 false)
- interrupted() : 현재 수행중인 Thread에 대해서 interrupt가 호출되었는지 확인. false로 초기화
- isInterrupted() : 특정 Thread에 대해서 interrupt 호출되었는지 확인. false로 초기화
3. yield()
- Thread 자신에게 주어진 실행시간을 다른 Thread에게 양보하는 method
- 이 메서드 역시 프로그램의 응답성을 높이기 위해 사용
4. join()
- Thread가 자신이 하는 작업을 잠시 멈추고 다른 Thread가 지정된 시간동안 작업을 수행할 수 있도록 처리
- interrupt()에 의해서 대기상태에서 벗어날 수 있으니 예외처리 필수!
- purpose) ?? next lesson TBC
multi-core processor를 사용하면,
이 core들이 수행속도를 높이기 위해 내부적으로 Cache를 가지고 있다.
메모리에서 읽어야 할 값이 만약 cache에 존재한다면 cache 값을 이용한다!
그래서, 우리가 memory에 있는 값을 바꿔도 바뀐 값으로 출력이 안 될 수 있다. 그럴 땐 cache를 무시하고 memory를 읽어서 사용하라는 명령어 volatile을 변수 선언할 때 타입명 앞에 사용한다.
'Java' 카테고리의 다른 글
UML (0) 2022.03.04 [Error] The application Eclipse can't be opened. (0) 2022.03.02 byte 기반 입출력, 네트워크 socket, client, server (1/13) (0) 2022.01.13 입출력, stream, file 문자 기반 입출력 (1/12) (0) 2022.01.12 HashMap, Thread (1/11) (0) 2022.01.11