반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

java.Thread 본문

[IT]/java

java.Thread

givemebro 2021. 3. 17. 09:38
반응형

Thread

사전적 의미

실, 실이 여러개 모여 옷을 만든다

정의

프로세스 내의 세부적 실행단위 (프로세스 : 현재 실행중인 프로그램)


ex)

동영상 플레이어 (Youtube 같은)를 실행 : 동영상 플레이어 프로세스
동영상 플레이어 프로세스의 세부적 실행단위는
영상서비스, 음향서비스, 자막서비스를 말함
이러한 프로세스 내의 세부적 실행단위를 Thread라고 하고
이를 동시에 진행되는 것을 Multi-Threading이라고 함

 


Thread 생성방법 2가지

1. extends Tread

2. implements Runnable

implements Runnable 권장 : java는 단일 상속이므로 implements Runable을 사용해야 다른 상속받을 수 있기 때문

 


Thread 동작원리( start( )와 run( ) )

start( ) : Thread 실행 가능상태( runnable)로 보냄
이후 JVM이 스케줄링해서 스케줄링이 되면 실생상태로 전이됨

run( ) : 스레드의 실행 내용을 정의
run( ) 메서드가 실행을 마칠 경우 스레드는 종료
JVM에 의해 스케줄링을 받으면 run( )이 실행됨

 


extends Thread

package step2;

// 멀티 스레드 환경에서 실행해서 실행 결과를 step1의 단일 스레드 환경 실행결과와 비교해본다
// 멀티 스레드 ( main thread + Worker thread )
// 이 환경에서는 메인 스레드는 Worker Thread 생성 후 start() 시키고
// 메인 스레드는 종료되고
// 별도의 Worker Thread는 JVM에 의해 스케줄링을 받ㅇ ㅏ자신의 run 메서드를 실행한 후 종료됨
// > 메인 스레드와 별도로 독립적인 스레드가 동작됨을 확인하는 예제
class Worker extends Thread {
	// Worker Thread의 실행 내용을 정의함
	// 아래 run 메서드는 JVM에 의해 호출됨
	// run 메서드가 실행을 종료하면 해당 스레드는 종료됨
	@Override
	public void run() {
		super.run();
		for (int i = 0; i < 50; i++) {
			System.out.println("WorkerThread: " + i);
		}
	}
}

public class TestThread2 {
	public static void main(String[] args) {
		System.out.println("**main Thread 시작**");
		Worker workerThWorker = new Worker();
		// Worker Thread를 실행 가능 상태로 보냄-JVM
		workerThWorker.start();
		for (int i = 0; i < 50; i++) {
			System.out.println("MainTread: " + i);
		}
		System.out.println("**main Thread 종료**");
	}

}
**main Thread 시작**
MainTread: 0
WorkerThread: 0
WorkerThread: 1
WorkerThread: 2
WorkerThread: 3
WorkerThread: 4
MainTread: 1
MainTread: 2
WorkerThread: 5
MainTread: 3
WorkerThread: 6
MainTread: 4
MainTread: 5
WorkerThread: 7
MainTread: 6
WorkerThread: 8
MainTread: 7
MainTread: 8
MainTread: 9
WorkerThread: 9
MainTread: 10
MainTread: 11
MainTread: 12
MainTread: 13
WorkerThread: 10
WorkerThread: 11
MainTread: 14
WorkerThread: 12
WorkerThread: 13
WorkerThread: 14
WorkerThread: 15
WorkerThread: 16
MainTread: 15
MainTread: 16
MainTread: 17
MainTread: 18
WorkerThread: 17
MainTread: 19
MainTread: 20
MainTread: 21
MainTread: 22
MainTread: 23
WorkerThread: 18
MainTread: 24
WorkerThread: 19
MainTread: 25
WorkerThread: 20
MainTread: 26
MainTread: 27
WorkerThread: 21
MainTread: 28
WorkerThread: 22
MainTread: 29
WorkerThread: 23
WorkerThread: 24
WorkerThread: 25
WorkerThread: 26
WorkerThread: 27
MainTread: 30
MainTread: 31
WorkerThread: 28
MainTread: 32
WorkerThread: 29
MainTread: 33
WorkerThread: 30
MainTread: 34
WorkerThread: 31
MainTread: 35
WorkerThread: 32
MainTread: 36
WorkerThread: 33
MainTread: 37
WorkerThread: 34
MainTread: 38
WorkerThread: 35
MainTread: 39
WorkerThread: 36
MainTread: 40
WorkerThread: 37
WorkerThread: 38
WorkerThread: 39
WorkerThread: 40
WorkerThread: 41
WorkerThread: 42
WorkerThread: 43
WorkerThread: 44
WorkerThread: 45
WorkerThread: 46
MainTread: 41
WorkerThread: 47
MainTread: 42
WorkerThread: 48
MainTread: 43
WorkerThread: 49
MainTread: 44
MainTread: 45
MainTread: 46
MainTread: 47
MainTread: 48
MainTread: 49
**main Thread 종료**

implements Runnable

package step3;

import step3.Worker;

// 멀티 스레드 환경에서 실행해서 실행 결과를 step1의 단일 스레드 환경 실행결과와 비교해본다
// 멀티 스레드 ( main thread + Worker thread )
// 이 환경에서는 메인 스레드는 Worker Thread 생성 후 start() 시키고
// 메인 스레드는 종료되고
// 별도의 Worker Thread는 JVM에 의해 스케줄링을 받ㅇ ㅏ자신의 run 메서드를 실행한 후 종료됨
// > 메인 스레드와 별도로 독립적인 스레드가 동작됨을 확인하는 예제
class Worker implements Runnable {
	// Worker Thread의 실행 내용을 정의함
	// 아래 run 메서드는 JVM에 의해 호출됨
	// run 메서드가 실행을 종료하면 해당 스레드는 종료됨
	@Override
	public void run() {
		for (int i = 0; i < 50; i++) {
			System.out.println("WorkerThread: " + i);
		}
	}
}

public class TestThread3 {
	public static void main(String[] args) {
		System.out.println("**main Thread 시작**");
		Worker worker = new Worker();
		Thread workerThread = new Thread(worker);
		// Worker Thread를 실행 가능 상태로 보냄-JVM
		workerThread.start();
		for (int i = 0; i < 50; i++) {
			System.out.println("MainTread: " + i);
		}
		System.out.println("**main Thread 종료**");
	}

}
**main Thread 시작**
MainTread: 0
MainTread: 1
MainTread: 2
MainTread: 3
MainTread: 4
MainTread: 5
MainTread: 6
MainTread: 7
MainTread: 8
MainTread: 9
MainTread: 10
MainTread: 11
WorkerThread: 0
MainTread: 12
WorkerThread: 1
WorkerThread: 2
MainTread: 13
WorkerThread: 3
MainTread: 14
WorkerThread: 4
MainTread: 15
WorkerThread: 5
WorkerThread: 6
WorkerThread: 7
WorkerThread: 8
WorkerThread: 9
WorkerThread: 10
WorkerThread: 11
MainTread: 16
MainTread: 17
WorkerThread: 12
WorkerThread: 13
WorkerThread: 14
WorkerThread: 15
MainTread: 18
WorkerThread: 16
MainTread: 19
MainTread: 20
WorkerThread: 17
MainTread: 21
WorkerThread: 18
WorkerThread: 19
MainTread: 22
WorkerThread: 20
MainTread: 23
MainTread: 24
WorkerThread: 21
MainTread: 25
MainTread: 26
WorkerThread: 22
MainTread: 27
WorkerThread: 23
MainTread: 28
WorkerThread: 24
MainTread: 29
MainTread: 30
WorkerThread: 25
MainTread: 31
MainTread: 32
MainTread: 33
MainTread: 34
MainTread: 35
MainTread: 36
MainTread: 37
MainTread: 38
MainTread: 39
MainTread: 40
MainTread: 41
MainTread: 42
MainTread: 43
MainTread: 44
MainTread: 45
MainTread: 46
MainTread: 47
MainTread: 48
MainTread: 49
**main Thread 종료**
WorkerThread: 26
WorkerThread: 27
WorkerThread: 28
WorkerThread: 29
WorkerThread: 30
WorkerThread: 31
WorkerThread: 32
WorkerThread: 33
WorkerThread: 34
WorkerThread: 35
WorkerThread: 36
WorkerThread: 37
WorkerThread: 38
WorkerThread: 39
WorkerThread: 40
WorkerThread: 41
WorkerThread: 42
WorkerThread: 43
WorkerThread: 44
WorkerThread: 45
WorkerThread: 46
WorkerThread: 47
WorkerThread: 48
WorkerThread: 49

 

 

java.Tread.scheduling

Thread scheduling 우선순위 방식 우선순위(priority)가 높으면 스케줄링이 될 가능성이 높아짐 스레드 우선 순위는 1~10 default:5 1이 가장 낮은 우선 순위, 10이 가장 높은 우선 순위 package step7; /* * 자..

broscoding.tistory.com

 

 

java.Deamon Thread

Deamon Thread 백그라운드에서 실행되는 스레드 자신을 실행시킨 스레드가 종료되면 함께 종료됨 ex) thread.setDaemon(true); 워드 작업 실행시 백그라운드에서 주기적으로 백업을 하도록 구현하고 이 백

broscoding.tistory.com

 

java.Tread.sleep

Thread.sleep(2000) // 2초간 중단되었다가 수행을 재개 package step5; /* * 멀티 스레드 테스트 (동영상 플레이어 가정) * 동영상 플레이어 프로세스 * 세부적 실행단위 * 1. 영상 스레드 * 2. 음향 스레드 *..

broscoding.tistory.com

 

반응형
Comments