멀티 스레드

dawn·2021년 3월 7일
0

자바

목록 보기
5/9

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) {	}
		}
		
	}
}
// Thread를 상속해서 하위 클래스를 만들어 생성
public class BeepPrintExample2 {
	public static void main(String[] args) {
		//Thread 하위클래스로부터 생성
		//작업스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용을 포함시킬 수도 있다.
		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. 스레드 우선순위

  • 멀티 스레드는 동시성 또는 병렬성으로 실행된다.
  • 동시성
    • 멀티작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질
  • 병렬성
    • 멀티 작업을 위해 멀티 코어에서 개별스레드를 동시에 실행하는 성질
  • 스레드 스케줄링
    • 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결정하는것
profile
안녕하세요

0개의 댓글