프로세스와 스레드
프로세스는 관리의 단위이다.
프로세스(작업)는 최소 1개의 스레드(실행)를 갖는다.
- 그러나 이 흐름이 1개가 아닌 N개가 될 수 있다. (멀티스레딩)
- 각각의 스레드는 동시에 각자 작동한다.
OS는 가상 메모리를 프로세스에게 할당한다.
- 가상 메모리는 프로세스로 제한된 공간이다.
프로세스에 속한 모든 스레드는 프로세스의 가상메모리로 공간이 제약된다.
스레드마다 각자 고유한 TLS(Thread Local Storage) 를 가지고 있다.
자바에서는 이를 ThreadLocal에서 관리한다.
스레드는 프로세스에 비해 메모리를 작게 점유한다.
그래서 스레드를 경량 프로세스라고 부르기도 한다.
스레드 생성
자바에서 스레드를 생성하는 방법은 2가지
Runnable인터페이스Thread클래스
run()메서드와 start()메서드의 차이
run(): 실행할 작업을 정의 (새로운 스레드를 실행하지 않음)start(): 실행 환경을 만들기 (새로운 스레드를 만듦)
내부적으로 start() 메서드는 아래 작업을 수행
- 새로운 스레드 생성
- 스레드 상태 관리
- 호출 스택 할당
- 운영체제 스케줄러에 실행 요청
- 새 스레드에서
run()실행
public class ThreadAndRunnableSample {
public static void main(String[] args) {
ThreadSample threadSample = new ThreadSample();
threadSample.run();
threadSample.start();
RunnableSample runnableSample = new RunnableSample();
runnableSample.run();
new Thread(runnableSample).start();
}
}
class ThreadSample extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": thread sample");
}
}
class RunnableSample implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": runnable sample");
}
}main: thread sample
Thread-0: thread sample
main: runnable sample
Thread-1: runnable sample