프로세스와 쓰레드(Process & Thread)
- 프로세스 : 실행 중인 프로그램, 자원(Resource)과 쓰레드로 구성 ( 자원 : CPU, MEMORY)
- 쓰레드 : 프로세스 내에서 실제 작업을 수행 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있음
- 멀티 태스킹(멀티 프로세싱) : 동시에 여러 프로세스를 실행시키는 것
- 멀티 쓰레딩 : 하나의 프로세스 내에 동시에 여러 쓰레드를 실행시키는 것
-> 프로세스를 실행하는 것보다 쓰레드를 생성하는 비용이 적음
-> 같은 프로세스 내의 쓰레드들은 서로 자원을 공유
멀티쓰레드의 장단점
- 대부분의 프로그램이 멀티쓰레드로 작성되어 있음
장점
- 시스템 자원을 보다 효율적으로 사용할 수 있다.
- 사용자에 대한 응답성이 향상된다.
- 작업이 분리되어 코드가 간결해 진다.
단점
- 동기화에 주의해야 한다.
- 교착상태가 발생하지 않도록 주의해야 한다.
- 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.
쓰레드의 구현과 실행
1. Thread 클래스를 상속
class ExThread_1 extends Thread {
public void run() {
/* 생략 */
}
}
2. Runnable 인터페이스를 구현
class ExThread_2 implements Runnable {
public void run() {
/* 생략 */
}
}
* 2번의 방법이 다중 상속등으로 인해 유연하다.
ExThread_1 t1 = new ExThread_1(); // 쓰레드 생성
t1.start(); // 쓰레드 실행
Thread t2 = new Thread(new ExThread_2()); // 쓰레드 생성
t2.start; // 쓰레드 실행
* run이 아닌 start를 호출하여 새로운 stack을 생성한 뒤 새로운 stack에 run이 올라간다.
쓰레드의 우선순위(priority of thread)
- 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있음
void setPriority(int newPriority); // 쓰레드의 우선순위를 지정한 값으로 변경
int getPriority(); // 쓰레드의 우선순위를 반환
쓰레드의 상태(state of thread)

쓰레드의 실행제어
- 쓰레드의 실행을 제어할 수 있는 메서드가 제공됨

* sleep은 예외처리가 필요하며 특정 쓰레드를 지정할 수 없다.
* suspend(), resume(), stop()은 deprecated이다.
쓰레드의 동기화(synchronized)
- 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락을 걸어서 데이터의 일관성을 유지하는 것
'Java' 카테고리의 다른 글
| 불편해서 직접만든 CapsLock 표시 (1) | 2023.12.23 |
|---|---|
| Java기초 예외처리 (0) | 2022.12.04 |
| 제네릭스 (0) | 2022.11.25 |