열심히 끝까지

42강 스레드1 본문

멘토씨리즈 JAVA

42강 스레드1

노유림 2022. 5. 10. 01:36

42-1 ) 스레드의 정의

스레드란?
하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것

<용어 정리>
프로세스(Process)            : 실행중인 프로그램
스래드(Thread)                : 프로세스에서 작업을 수행하는 것
멀티 스레드 프로세스(Multi-Thread Process)
                                      : 두 가지 이상의 작업을 하는 프로세스

[프로세스가 실행되는 방식]
1. 시간 분할 방식
       : 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행되는 방식

2. 선점형 방식
       : 각각의 프로세스에게 우선 순위를 부여하고 
         우선순위가 높은 순으로 실행되는 방식
       

42-2 ) 스레드의 생성

[JVM이 스레드 처리 시 하는 일] => 스레드 스케줄링

- 스레드가 몇 개 존재하는지
- 스레드가 실행되는 프로그램 코드의 메모리 위치가 어디인지
현재 스레드의 상태는 무엇인지
스레드의 우선순위는 몇 인지

[개발자가 스레드 처리 시 하는 일]

- 자바 스레드로 작동할 작업이 무엇인지 코드로 작성
스레드 코드가 실행할 수 있도록 JVM한테 요청


1. 스레드 작업 코드 작성 방법

1) Thread 클래스 상속
2) Runnable 인터페이스 구현
----------------------------------------------------------------------
1) Thread 클래스 상속

class T1 extends Thread{
       public void run(){        // run() 메서드 오버라이딩(재정의)
                                      // run 메서드를 만들지 않아도 오류가 나진 않음
                     // 작업할 내용
       }
}

2) Runnable 인터페이스 구현
class T2 implements Runnable{
       public void run(){       // run 메서드 오버라이딩
                                     // 인터페이스이기에 무조건 정의내려야 함
                     // 작업할 내용
       }
}


2. 스레드 코드 실행하도록 JVM 요청

1) Thread 클래스를 상속받는 클래스
2) Runnable 인터페이스를 구현한 클래스
----------------------------------------------------------------------
1) Thread 클래스를 상속받는 클래스
Th1 t1 = new Th1();  // 인스턴스 생성
t1.start();

2) Runnable 인터페이스를 구현한 클래스
Th2 t2 = new Th2();  // 인스턴스 생성
Thread t = new Thread(t2);

t.start();
==> * Thread 클래스의 매개변수 생성자에 인자값으로 전달!


<실습>Thread1
Thread 클래스 상속과 Runnable 인터페이스 구현한 스레드를
각각 실행하는 실습


=> 실행결과, 스레드를 호출한 순서에 상관없이
     메인함수, 러너블, 스레드가 골고루 실행되고 있다.


<실습>MainThread
Thread 이름 ,상태, 우선순위를 확인하는 메서드 실습



*priority가 정의 되어 있지 않으면 기본값으로 5를 가진다.