반응형
1. 스레드(스레드 제어)
- 스레드 객체를 생성하고 start() 메서드를 호출하면 언제든 실행할 준비가 되어 있는 '실행 대기 상태'가 됨
-> 운영체제에서 실행 대기 상태 스레드 중 하나를 선택하여 '실행 상태'로 만드는 것- 실행 상태의 스레드는 run() 메서드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있고,
실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 되기도 함 - run() 메서드의 내용이 모두 실행되면 스레드의 실행이 멈추고 종료 상태가 됨
- 실행 상태의 스레드는 run() 메서드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있고,
1) 스레드 상태 (Thread States)
- 자바에서 Thread.State 열거형(Enum)은 총 6가지 상태를 정의
상태 | 설명 |
NEW | 스레드 객체가 생성됐지만 아직 start()가 호출되지 않음 |
RUNNABLE | 실행 준비 완료 상태(JVM이 스케줄링 시 CPU를 할당하면 실행됨) |
BLOCKED | 다른 스레드가 가진 락(lock)을 기다리는 상태 |
WAITING | 특정 조건이 만족될 때까지 무한 대기 (wait() 등 사용 시) |
TIMED_WAITING | 일정 시간 동안 대기 (sleep(), join(timeout) 등) |
TERMINATED | 스레드가 정상적으로 종료되거나 예외로 인해 종료됨 |
2) 스레드 상태 제어: 실행 중인 스레드의 상태를 변경하는 것
- 스레드 상태 제어 메서드
-> 핵심: sleep, join, interrupt
메서드 | 사용 시 상태 변화 | 설명 |
start() | NEW → RUNNABLE | 스레드를 시작하여 실행 대기 상태로 만듦 |
sleep(ms) | RUNNABLE → TIMED_WAITING | 지정된 시간 동안 실행 일시 중지 |
join() | 현재 스레드 → WAITING or TIMED_WAITING | 다른 스레드가 종료될 때까지 대기 |
wait() | RUNNABLE → WAITING | 모니터 락을 가진 객체에서 대기 상태로 진입 |
notify() / notifyAll() | WAITING → RUNNABLE | 대기 중인 스레드 깨움 (모니터 락 필요) |
interrupt() | TIMED_WAITING or WAITING → RUNNABLE or 예외 발생 | 대기 중인 스레드에 인터럽트 신호 전달 |
synchronized 블록 | RUNNABLE → BLOCKED (경우에 따라) | 락이 필요할 때 다른 스레드가 사용 중이면 BLOCKED 상태로 진입 |
3) 데몬 스레드(daemon thread)
- 주 스레드의 작업을 돕는 보조적 역할을 수행하는 스레드(사용자 작업과 직접 연관은 아님)
- 일반 스레드와 달리 JVM 종료 조건 만족(데몬 스레드만 남으면 JVM 종료)
-> 메인 스레드 종료 시 함께 종료되므로,
중요한 작업(예: 파일 저장, 네트워크 통신 등)을 데몬 스레드에서 진행하면 작업 중단 가능성이 있어 위험 - GC(가비지 컬렉터)나 JVM 내부 서비스가 주로 데몬 스레드 기반
- 백그라운드 로깅, 자동 저장, 타이머 기능 등을 구현할 때 사용
- 스레드 풀 또는 대기열 모니터링에서 관리용 작업 스레드로 사용
2. 컬렉션 프레임워크(Collection Framework)
- 자바는 널리 알려져 있는 자료구조(Data Structure)를 사용하여 객체들을 효율적으로 추가/삭제/검색 가능하도록,
인터페이스와 구현 클래스를 java.util 패키지에서 '컬렉션 프레임워크'로 제공
1) List 컬렉션: 순서가 있는 데이터 집합
- 요소들이 삽입 순서대로 저장됨
- 중복 허용
- 인덱스를 이용한 접근이 가능 (get(int index))
(1) 대표 구현 클래스
ArrayList | 배열 기반, 빠른 조회, 동적 크기 조절 가능 |
LinkedList | 노드 기반, 삽입/삭제에 강점 |
Vector | ArrayList와 유사하지만 동기화 지원 |
(2) 활용 예시
2) Set 컬렉션: 중복 없는 데이터 집합
- 순서를 유지하지 않거나 정렬된 형태로 저장 (구현에 따라 다름)
(1) 대표 구현 클래스
HashSet | 빠른 검색, 순서 미보장 |
LinkedHashSet | 삽입 순서 유지 |
TreeSet | 정렬된 형태로 저장 (Comparable 또는 Comparator 사용 가능) |
(2) 활용 예시
3) Map 컬렉션
- 데이터를 Key → Value 형태로 저장
- 키는 중복 불허, 값은 중복 가능
- 키를 통해 빠르게 값 검색 가능
(1) 대표 구현 클래스
HashMap | 가장 많이 쓰이는 Map, 빠른 검색, 순서 미보장 |
LinkedHashMap | 삽입 순서 유지 |
TreeMap | 키를 기준으로 정렬됨 |
Hashtable | 동기화 지원, 레거시 클래스 |
(2) 활용 예시
반응형
'자바(JAVA) > 미니 프로젝트 & 기초 공부' 카테고리의 다른 글
Java 기초 또 다시 공부하기 20일차(마지막) - 입출력 스트림(보조 스트림, 입출력 관련 API) (0) | 2025.07.09 |
---|---|
Java 기초 또 다시 공부하기 19일차 - 컬렉션 프레임워크2(LIFO와 FIFO 컬렉션), 입출력 스트림(I/O 스트림) (0) | 2025.07.08 |
Java 기초 또 다시 공부하기 17일차 - 기본 API 클래스(java.util 패키지), 스레드(멀티 스레드) (0) | 2025.07.02 |
Java 기초 또 다시 공부하기 16일차 - 기본 API 클래스(java.lang 패키지) (0) | 2025.06.20 |
Java 기초 또 다시 공부하기 15일차 - 예외 처리(예외 클래스, 예외 처리) (1) | 2025.06.18 |