전공 과목 이수2👨‍💻/JAVA(공)

자바 11주차 | 11장 스레드

천숭이 2021. 5. 19. 14:02

스레드는 순차프로그램과 유사하게 시작, 실행, 종료의 실행순서를 가진다.

 

# 스레드 객체 생성

Thread worker = new Thread();

 

# 스레드 동작 기술

public void run()

1. Thread 클래스 확장    2. Runnable 인터페이스 구현

 

# 스레드 시작

worker.start()

 

# Thread클래스 확장

run 메소드 작성하고 start 메소드로 실행 가능

class SimpleThread extends Thread {
	public SimpleThread(String name) {
		super(name);
	}
	public void run() {
		System.out.println(getName() + " is now running.");
	}
}
public class SimpleThreadTest {
	public static void main(String[] args) {
		SimpleThread t = new SimpleThread("SimpleThread");
		System.out.println("Here : 1");
		t.start();
		System.out.println("Here : 2");
	}
}

11_1출력

Thread상속받은 클래스의 객체를 생성하고 start 메소드로 스레드 실행가능

 

# Runnable인터페이스 구현

스레드 객체를 생성하고 나서야 start메소드로 스레드 실행 가능

class RunnableThread implements Runnable {
	public void run() {
		System.out.println("Implementation of Runnable");
	}
}
public class ImplOfRunnable {
	public static void main(String[] args) {
		Thread t = new Thread (new RunnableThread());
		System.out.println("Here : 1");
		t.start();
		System.out.println("Here : 2");
	}
}

출력결과는 11_1과 같음

 

# Runnable -> Not Runnable

sleep호출

wait호출

입출력을 위해 블록됐을때

 

# Not Runnalbe -> Runnable

sleep시간경과

해당 입출력 완료됐을 때

 

# 스레드 스케줄링 *****중요*****

Runnable 상태에 있는 여러 스레드의 실행 순서를 제어하기 위해

고정 우선 순위 스케줄링 알고리즘

스레드를 생성시킨 스레드의 우선 순위 상속

 

# 스레드 우선순위

MIN_PRIORITY, MAX_PRIORITY

값이 클수록 높은 우선 순위

디폴트 우선 순위 : NORM_PRIORITY

 

# yield 메소드

다른 runnalbe 상태의 스레드가 실행될 수 있도록 현재 실행중인 스레드를 양보한다. 현재 실행중인 스레드는 중단시키고, 스케줄러가 우선순위가 가장 높은 스레드를 선택한다. 방금 중단된 스레드의 우선순위가 가장 높으면 그 스레드가 다시 실행될 수도 있다.