프로세스
- 실행 중인 하나의 애플리케이션
- 운영체제로부터 실행에 필요한 메모리를 할당받아 코드를 실행
스레드: 코드 실행 흐름
멀티스레드
- 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있음.
- 하나의 프로세스 내부에 생성되기 때문에, 하나의 스레드가 예외 발생 시 프로세스 자체가 종료될 수 있음 -> 다른 스레드에 영향 -> 예외 처리 필수!
<-> 멀티프로세스: 운영체제에서 할당받은 자신의 메모리 있어 서로 독립적. 오류 발생해도 다른 프로세스에 영향 미치지 않음.
방법: 1. java.lang.Thread 클래스를 직접 객체화해서 생성
2.Thread 클래스를 상속해서 하위 클래스를 만들어 생성함.
Runnable(작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체, 인터페이스 타입)을
매개값으로 갖는 생성자를 호출해야 함.
Thread thread = new Thread(Runnable target);
runnalbe 구현 클래스 작성
class Task implements Runnable {
public void run() {
스레드가 실행할 코드;
}
}
Runnable은 작업 내용을 가지고 있는 객체이지 실제 스레드는 아닙니다.
Runnable 구현 객체를 생성한 후, 이것을 매개값으로 해서 Thread 생성자를 호출해야 작업 스레드가 생성
Runnable task = new Task();
Thread thread = new Thread(task);
코드를 좀 더 절약하기 위해 Thread 생성자를 호출할 때
Runnable 익명 객체를 매개값으로 사용할 수 있음. 이 방법이 더 많이 사용됨.
Thread thread = new Thread(new Runnable() {
public void run() {
스레드가 실행할 코드;
}
});
작업 스레드는 생성 즉시 실행되는 것이 아니라, start)메소드를 호출해야만 실행됨.
thread.start()
start()메소드가 호출되면, 작업 스레드는 매개값으로 받은 Runnable의 run()메소드를 실행하면서 자신의 작업을 처리함.