일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 머신러닝
- web 개발
- 대이터
- web
- pycharm
- CES 2O21 참가
- bccard
- mglearn
- web 사진
- postorder
- paragraph
- 재귀함수
- 자료구조
- java역사
- discrete_scatter
- 데이터전문기관
- 웹 용어
- tensorflow
- web 용어
- cudnn
- broscoding
- vscode
- Keras
- 결합전문기관
- inorder
- html
- CES 2O21 참여
- KNeighborsClassifier
- C언어
- classification
- Today
- Total
bro's coding
java.Thread 본문
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
'[IT] > java' 카테고리의 다른 글
java.currentTimeMillis(유닉스 시간) (0) | 2021.03.18 |
---|---|
java.Deamon Thread (0) | 2021.03.17 |
java.Tread.scheduling (0) | 2021.03.17 |
java.Tread.sleep (0) | 2021.03.17 |
java.FileMove(파일 이동) (0) | 2021.03.16 |
java.Object Serialization.transient(직렬화 제외) (0) | 2021.03.15 |
java.Object Serialization(객체 직렬화)/Object DeSerialization(객체 역직렬화) (0) | 2021.03.15 |
java.SerialVersionUID (0) | 2021.03.15 |