java 기초 공부 내용 정리(스레드1 - Thread, Runnable)

홍준성·2022년 6월 4일
0

java 기초 공부

목록 보기
34/39

스레드

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

용어 정리

  • 프로세스: 실행 중인 프로그램
  • 스레드: 프로세스에서 작업을 수행하는 것
  • 멀티 스레드 프로세스: 두 가지 이상의 작업을 하는 프로세스

프로세스가 실행되는 방식

  1. 시간분할방식
    모든 프로세스에게 동일한 시간을 할당하고 골고루 실행되는 방식
  2. 선점형 방식
    각각의 프로세스에게 우선 순위를 부여하고 우선순위가 높은 순으로 실행되는 방식

스레드의 생성

JVM이 스레드 처리 시 하는 일

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

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

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

스레드 작업 코드 작성 방법

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

방법1. Thread 클래스 상속
class T1 extends Thread{
	public void run(){
    	//작업할 내용
    }
}

방법2. Runnable 인터페이스 구현
class T2 implements Runnable{
	public void run(){ //run()메서드 오버라이딩
    	// 작업할 내용
    }
}

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

방법1. Thread 클래스를 상속받은 클래스
Th1 t1 = new Th1(); //인스턴스 생성
t1.start();

방법2. Runnable 인터페이스 구현한 클래스
Th2 t2 = new Th2(); //인스턴스 생성
Thread t = new Thread(t2) //Thread 클래스의 매개변수 생성자에 인자값으로 전달
t.start();
3개의 스레드(메인, Thread 클래스, Runnable인터페이스)가 동시에 작업을 실행하는 코드
→ 메인도 스레드다!

	public static void main(String[] args) {
		//JVM 스레드 요청
		//1) Thread 클래스 상속받은 클래스의 스레드를 요청
		MyThread th1 = new MyThread();
		th1.start();
		
		//2) Runnable 인터페이스를 구현한 클래스의 스레드를 요청
		MyThread2 th2 = new MyThread2();
		Thread t = new Thread(th2); //Thread(Runnable target)
		t.start();
		
		for(int i=0;i<10;i++) {
			System.out.println("메인 함수 진행 중" + i);
		}
		
	}

}

//방법1. Thread 클래스를 상속받아 작업을 구현
class MyThread extends Thread{
	//run() 메서드 오버라이딩(재정의)
	public void run() {
		//스레드가 해야할 작업 구현
		for(int i=0;i<10;i++) {
			System.out.println("스레드 진행 중 " + i);
		}
	}
	
}

//방법2. Runnable 인터페이스를 구현하여 작업을 구현
class MyThread2 implements Runnable{
	@Override
	public void run() {
		for(int i=0;i<10;i++) {
			System.out.println("러너블 진행 중 "+i);
		}
		
	}
	
}
profile
준성이의 개발자 공부 velog

0개의 댓글