728x90
프로세스(Process)란?
프로세스란 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다.
이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 쓰레드로 구성된다.
쓰레드(Thread)란?
쓰레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
모든 프로세스에는 한 개 이상의 쓰레드가 존재하여 작업을 수행한다.
또한, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티쓰레드 프로세스(Multi-Thread Process)라고 한다.
Thread 클래스
- 생성자
Thread() | |
Thread(String s) | 쓰레드 이름 |
Thread(Runnable r) | 인터페이스 객체 |
Thread(Runnable r, String s) | 인터페이스 객체와 쓰레드 이름 |
- 메소드
static void sleep(long msec) throws Interrupted Exception | msec에 지정된 밀리초 동안 대기 |
String getName() | 쓰레드 이름 반환 |
void setName(String s) | 쓰레드 이름을 s로 설정 |
void start() | 쓰레드 시작 → run() 메소드 호출 |
int getPriority() | 쓰레드 우선 순위 반환 |
void setPriority(int p) | 쓰레드 우선 순위를 p로 설정 (숫자가 높을수록 우선순위 또한 높아짐) |
boolean isAlive() | 쓰레드가 실행 중이면 true, 종료되었으면 false |
void join() throws InterruptedException | 쓰레드가 끝날 때까지 대기 |
void run() | 쓰레드가 실행할 부분 기술 (오버라이딩) |
void suspend() | 쓰레드 일시정지 |
void resume() | 쓰레드 다시 시작 |
void yield() | 다음 차례의 쓰레드에게 실행 시간을 양보하고 자신은 실행 대기 상태로 변경 |
쓰레드(Thread) 생성과 실행
- Runnable 인터페이스를 구현하는 방법
- Thread 클래스를 상속받는 방법
class ThreadWithClass extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName()); // 현재 실행 중인 쓰레드 이름 반환
try {
Thread.sleep(10); // 0.01초간 쓰레드를 멈춤
} catch (InterruptedException) {
e.printStackTrace();
}
}
}
}
class ThreadWithRunnable implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()); // 현재 실행 중인 쓰레드 이름 반환
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadWithClss thread1 = new ThreadWithClass(); // 2. Thread 클래스를 상속받는 방법
Thread thread2 = new Thread(new ThreadWithRunnable()); // 1. Runnable 인터페이스를 구현하는 방법
// 쓰레드 실행
thread1.start();
thread2.start();
}
}
※ 한 번 종료한 쓰레드는 다시 시작할 수 없으며 쓰레드 객체를 다시 새로 생성해야 한다.
쓰레드(Thread) 상태
- NEW : 쓰레드가 생성되었지만 쓰레드가 아직 실행할 준비가 되지 않음
- RUNNABLE : 쓰레드가 실행되고 있거나 실행이 준비되어 스케줄링을 기다리는 상태
- WAITING : 다른 쓰레드가 notify(), nofityAll()을 불러주기를 기다리고 있는 상태(동기화)
- TIMED_WAITING : 쓰레드가 sleep(n) 호출로 인해 n 밀리초동안 잠을 자고 있는 상태
- BLOCK : 쓰레드가 I/O 작업을 요청하면 자동으로 쓰레드를 BLOCK 상태로 만든다.
- TERMINATED : 쓰레드가 종료된 상태
※ 쓰레드 상태는 JVM에 의해 기록/관리된다.
728x90
'2022 하계방학 SW 집중교육' 카테고리의 다른 글
[Java] toString() (0) | 2022.08.15 |
---|---|
[Java] Package (0) | 2022.08.15 |
[Java] Interface (0) | 2022.08.15 |
[Github] 파일 업로드 (0) | 2022.08.11 |
[Java] Coding Convention (0) | 2022.08.11 |