스레드
실행 중인 하나의 애플리케이션을 프로세스(process)라고 하며, 애플리케이션이 실행되면 운영체제로부터 실행에 필요한 메모리를 할당 받아 코드를 실행한다
운영 체제는 CPU 및 메모리 자원을 병렬로 할당하는 멀티 태스킹이 가능한데, 각 프로세스는 순차적으로 실행할 코드 이름인 스레드(thread)를 병렬로 실행할 수 있다
메인 스레드
모든 자바 애플리케이션은 메인 스레드가 main() 메소드를 실행하며 시작된다
작업 스레드
멀티 스레드 애플리케이션을 개발하려면 몇 개의 작업을 병렬로 실행할 지 결정한 뒤 각 작업별로 클래스를 상속/생성해서 작업 스레드를 객체화해 사용해야 한다
동기화 메소드
멀티 스레드 프로그램에서 스레드들이 객체를 공유해 작업하면 예상치 못한 결과가 나올 수 있다
스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없도록 사용 중인 객체에 잠금을 걸 수 있다
- 임계 영역(critical section): 단 하나의 스레드만 실행할 수 있는 코드 영역
- 동기화(synchronized) 메소드: 스레드가 객체 내부의 동기화 메소드를 실행하면 즉시 객체 잠금
스레드 상태
- 실행 대기(runnable) 상태: 스레드 객체를 생성 후 start() 메소드를 호출한 직후의 상태
- 실행(running) 상태: 실행 대기 상태의 스레드 중 운영체제가 하나를 선택해 CPU가 run() 메소드를 실행한 상태로 메소드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수도 있음
- 종료(terminated) 상태: 실행 상태에서 run() 메소드가 종료되어 스레드 실행이 정지된 상태
데몬 스레드
주 스레드의 작업을 돕는 보조 스레드를 데몬 스레드라 하며, 주 스레드 종료 시 같이 종료된다
'Languages > Java' 카테고리의 다른 글
[HUFS/객체지향프로그래밍] #13 입출력 스트림 (0) | 2023.01.10 |
---|---|
[HUFS/객체지향프로그래밍] #12 컬렉션 프레임워크 (0) | 2023.01.09 |
[HUFS/객체지향프로그래밍] #10 기본 API 클래스 (0) | 2023.01.06 |
[HUFS/객체지향프로그래밍] #9 예외 처리 (1) | 2023.01.04 |
[HUFS/객체지향프로그래밍] #8 중첩 클래스와 중첩 인터페이스 (0) | 2023.01.04 |