1. 프로세스란?
- 실행중인 하나의 애플리케이션
- 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행 하는것
- 하나의 애플리케이션은 다중 프로세스를 만들기도 한다.
2. 스레드란?
- 하나의 코드 실행흐름
- 한 프로세스 내에 스래드가 두개라면 두 개의 코드 실행 흐름이 생긴다는 의미
3. 멀티 프로세스와 멀티스레드
- 멀티 프로세스는 애플리케이션 단위이고, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹 단위이다.
- 멀티 프로세스
- 운용체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 서로 독립적
- 따라서 하나의 프로세스에서 오류가 발생해도 다른 프로세스에게 영향을 미치지 않는다.
- 멀티 스레드
- 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로새스 자 체가 종료될 수 있어 다른 스레드에게 영향을 미친다.
- 따라서 멀티 스레드에서는 예외 처리에 만전을 기해야 한다.
4. 작업스래드 생성과 실행
- 어떤 자바 애플리케리션이건 메인 스레드는 반드시 존재하기 때문에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하면 된다.
- java.lang.Thread클래스를 직접 객체화해서 생성해도 되지만, Thread를 상속해서 하위 클래스를 만들어 생성할 수도 있다.
//java.lang.Thread클래스를 직접 객체화해서 생성
public class BeepPriintExample {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for(int i=0; i<10; i++) {
toolkit.beep();
try {Thread.sleep(500); } catch (Exception e) { }
}
});
thread.start();
for(int i=0; i<10; i++) {
System.out.println("띵");
try {Thread.sleep(500); } catch (Exception e) { }
}
}
}
public class BeepPrintExample2 {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for(int i=0; i<10; i++) {
toolkit.beep();
try { Thread.sleep(500); } catch (InterruptedException e) {}
}
}
};
thread.start();
for(int i=0; i<10; i++) {
System.out.println("띵");
try { Thread.sleep(500); } catch (InterruptedException e) {}
}
}
}
5. 스레드 우선순위
- 멀티 스레드는 동시성 또는 병렬성으로 실행된다.
- 동시성
- 멀티작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질
- 병렬성
- 멀티 작업을 위해 멀티 코어에서 개별스레드를 동시에 실행하는 성질
- 스레드 스케줄링
- 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결정하는것