Thread
- 프로세스 & 스레드
- 멀티 프로세스 VS 멀티 스레드
- 싱글 스레드와 멀티 스레드
- 멀티 스레드 장단점
- 스레드 생성
- 스레드 스케쥴링
- 스레드 컨트롤
- 동기화
프로세스(Process) & 스레드
- 프로세스
쉽게 말하면 실행중인 프로그램
프로세스는 프로그램이 실행 될 때 마다 개별적으로 생성
하나의 프로세스는 프로그램을 수행함에 있어 필요한 데이터와 메모리 등의 할당 받은 자원,
그리고 하나 이상의 스레드로 구성된다
- 스레드
프로세스 내에서 할당된 자원을 이용해 실제 작업을 수행하는 작업 단위
모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업 단위를 가짐
- 메인스레드
싱글 스레드의 경우 메인 스레드가 종료되면 프로세스도 종료 되지만,
멀티 스레드의 경우 실행중인 스레드가 하나라도 있다면 프로세스가 종료되지 않음
멀티 프로세스 VS 멀티 스레드
멀티 프로세스: 각각의 프로세스를 독립적으로 샐행하는 것
멀티 스레드: 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것
싱글 스레드와 멀티 스레드
싱글 스레드: 메인 스레드 하나만 가지고 작업을 처리 -> 한 작업씩 차례대로 처리해 나감
멀티 스레드: 메인 스레드 외의 추가적인 스레드를 이용하여 병렬적으로 작업을 처리
멀티스레드 장단점
장점
- 자원을 보다 효율적으로 사용 가능
- 사용자의 대한 응답성 향상
- 애플리케이션의 응답성 향상
- 작업이 분리되어 코드가 간결해짐
- cpu 사용률 향상
단점
- 동기화(Synchronization)에 주의해야함
- 교착상(dead-lock)가 발생하지 않도록 주의해야 함
- 프로그래밍 시 고려해야 할 사항이 많음
스레드 생성
- Thread 클래스를 상속 받는 방법
public class 클래스명 extends Thread{
// 상속 처리 후, run() 메소드 오버라이딩
@Override
public void run(){
//작업하고자 하는 코드 작성
}
}
public class Run{
public static void main(String[] args){
클래스명 레퍼런스 = new 생성자(); // Thread를 상속한 객체 생성
레퍼런스.start();
}
}
- Runnable 인터페이스를 구현하는 방법
public class 클래스명 implements Runnable{
// 상속 처리 후, run() 메소드 오버라이딩
@Override
public void run(){
//작업하고자 하는 코드 작성
}
}
public class Run{
public static void main(String[] args){
클래스명 레퍼런스 = new 생성자(); // Runnable을 구현한 객체 생성
Thread thread = new Thread(레퍼런스);
thread.start();
}
}
- run() 호출
- start() 호출
스레드 스케쥴링
- 스레드 스케쥴링
스레드 개수가 코어의 수보다 많을 경우 스레드를 어떤 순서로 동시성을 실행할 것인가를 결정하는 것
스케쥴링에 의해 스레드들은 번갈아가며 run() 메소드를 조금씩 실행
- 자바 스레드 스케쥴링 방식 - 우선 순위 방식
1. 우선 순위 방식
- 우선 순위가 높은 스레드가 작업 시간을 더 많이 가지도록 하는 스케쥴링 방식
- 스레드에 1~10까지 우선 순위 번호 부여 가능(번호가 높을수록 우선 순위가 높음)
- 스레드 생성 시 우선순위 기본값은 5
public class Run{
public static void main(String[] args){
클래스명 레퍼런스 = new 생성자(); //Thread를 상속한 객체 생성
레퍼런스.setPriority(1~10);
}
}
- 자바 스레드 스케쥴링 방식 - 순환 할당 방식
시간 할당량(Tile Slice)를 정하여 하나의 스레드를 정해진 시간 만큼 실행시키는 방식
JVM에 의해 정해짐(코드로 제어 불가능)
스레드 컨트롤
실행중인 스레드의 상태를 제어하기 위한 것
효율적이고 정교한 스케쥴링을 위한 스레드 상태를 제어하는 기능
동기화
1. 동기화 메소드
public synchronized void method(){
// 한 개의 스레드만 실행할 수 있음
}
2. 동기화 블록
public void method1() {
// 여러 스레드 실행할 수 있음
synchronized(공유 객체){
//한 개의 스레드만 실행할 수 있음
}
// 여러 스레드 실행할 수 있음
}
'Java > Java 개념' 카테고리의 다른 글
23. 네트워크(Network) (0) | 2022.10.24 |
---|---|
21 - 2. Map, Properties, Stack, Queue, Deque (0) | 2022.10.11 |
21 - 1. 컬렉션(Collection) (0) | 2022.10.11 |
20. File (0) | 2022.10.11 |
19. 입출력(IO) (0) | 2022.10.06 |