- 프로세스(Process): 실행 중인 프로그램의 인스턴스
- 스레드(Thread): 프로세스 내에서 실행되는 독립적인 실행 단위
- Thread 클래스를 상속하는 방법: Thread 클래스 상속 + run() 오버라이드 -> 메인 클래스에서 인스턴스 생성 -> start()
- Runnable 인터페이스를 구현하는 방법: Runnable 인터페이스 구현 + run() 오버라이드 -> 메인 클래스에서 인스턴스 생성 -> new Thread()의 전달 인자로 넘김 -> start()
run() start() 실행 새 스레드는 생성되지 않으며 run() 메소드를 호출 스레드 자체에서 실행 새 스레드를 생성하고 새로 생성된 스레드에서 run() 메소드를 실행 다중 호출 가능 불가능 정의된 곳 java.lang.Runnable 인터페이스(구현체에서 오버라이드 필수) java.lang.Thread 클래스
1) Thread 클래스를 상속하는 방법
package lesson11;
public class ThreadExtends extends Thread {
// 필드
private String resource;
// 메소드
public ThreadExtends(String resource) {
this.resource = resource;
}
@Override
public void run() {
for(int i = 0; i < 5; i++) {
System.out.print(this.resource + " ");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package lesson11;
public class Ex01 {
public static void main(String[] args) {
ThreadExtends te1 = new ThreadExtends("●");
ThreadExtends te2 = new ThreadExtends("○");
// run: 스레드 생성 X, 순차적으로 실행
te1.run();
te2.run();
System.out.println();
// start: 스레드 생성 O, 동시에 실행
te1.start();
te2.start();
}
}
2) Runnable 인터페이스를 구현하는 방법
package lesson11;
public class ThreadImplements implements Runnable {
// 필드
private String resource;
// 생성자
public ThreadImplements(String resource) {
this.resource = resource;
}
@Override
public void run() {
for(int i = 0; i < 5; i++) {
System.out.print(this.resource + " ");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package lesson11;
public class Ex02 {
public static void main(String[] args) {
ThreadImplements ti1 = new ThreadImplements("●");
ThreadImplements ti2 = new ThreadImplements("○");
Thread t1 = new Thread(ti1);
Thread t2 = new Thread(ti2);
// run: 스레드 생성 X, 순차적으로 실행
ti1.run();
ti2.run();
System.out.println();
// start: 스레드 생성 O, 동시에 실행
t1.start();
t2.start();
}
}
메소드명 | 설명 | 반환값 |
---|---|---|
join() | 스레드가 종료될 때까지 (메소드를 호출한 스레드가) 대기 ex) thread1.join()을 호출한 스레드가 thread1이 종료될 때까지 대기 | void |
1) 동시성 vs. 병렬성
- 동시성(Concurrent): 번갈아 가며 실행
- 병렬성(Parallel): 실제로 동시에 실행
2) 멀티 프로세스 vs. 멀티 스레드
- 멀티 프로세스: 여러 독립적인 프로세스를 동시(concurrent)에 실행하는 방식
- 멀티 스레드: 하나의 프로세스 내에서 여러 스레드를 동시(concurrent)에 실행하는 방식
3) 프로세스 vs. 프로세서
- 프로세스(Process): 프로그램 실행 방식. 프로그램 개발자가 싱글/멀티를 결정.
- 프로세서(Processor): 보통 CPU(중앙 처리 장치)를 의미. 컴퓨터 시스템의 하드웨어 구성에 따라 싱글/멀티가 결정.
4) 멀티 프로세서 vs. 멀티 코어
알아야 할 것
- 프로세서(CPU)는 코어를 포함한다.
- 멀티 프로세서: 두 개 이상의 프로세서(CPU)를 가진 시스템.
- 멀티 코어: 두 개 이상의 코어를 가진 하나의 프로세서(CPU)
아래 이미지는 멀티 프로세서, 멀티 코어를 가진 컴퓨터를 나타낸 것이다.