열심히 끝까지
43강 스레드2 본문
<복습>
스레드
: 하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것
<용어 정리>
- 프로세스(Process) : 실행 중인 프로그램
- 스레드(Thread) : 프로세스에서 작업을 수행하는 것
- 멀티 스레드 프로세스(Multi-Thread Process)
: 두 가지 이상의 작업을 하는 프로세스
[스레드 생성 방법]
- 자바 스레드로 작동할 작업이 무엇인지 코드로 작성
1) Thread 클래스 상속
2) Runnable 인터페이스 구현
- 스레드 코드가 실행할 수 있도록 JVM한테 요청
1) 인스턴스 생성 후 start() 호출
2) 인스턴스 생성 후 Thread() 매개변수 생성자에 인자값 전달, start() 호출
1) Thread 클래스 상속
class T1 extends Thread{
public void run(){
// 작업할 내용
}
}
Th1 t1 = new Th1();
t1.start();
------------------------
2) Runnable 인터페이스 구현
class T2 implements Runnable{
public void run(){
// 작업할 내용
}
}
Th2 t2 = new Th2();
Thread t = new Thread();
t.start();
---------------------------------------------------------------------
43-1 ) 스레드의 우선순위
: 스레드는 시분할 방식으로 CPU의 시간을 분배하여 실행하지만
사용자가 직접 스레드의 우선순위를 지정해서 특정 스레드에 더 많은
실행시간 부여 가능
<우선순위 지정 메서드>
void setPriority(int new Priority) 우선 순위 지정
int getPriority 우선 순위 반환
- 우선순위는 1부터 10까지 부여 가능
- 설정하지 않을 경우 기본적으로 5
<실습>Thread2
우선순위에 따른 스레드의 동작 실습
43-2 ) 스레드의 라이프 사이클
: 스레드는 현재 상태에 따라 네 가지 상태로 분류할 수 있으며
상태가 변화하는 주기를 Life Cycle이라고 한다.
<스레드 상태>
- new : 스레드가 키워드 new를 통해서 인스턴스화된 상태
Runnable이 될 수 있는 상태이며 아직 대기열에 올라가지 못한 상태
- Runnable : start() 메서드가 호출되면 new 상태에서 Runnable 상태가 된다.
Runnable상태가 되면 실행할 수 있는 상태로 대기하게 되며
스케줄러에 의해 선택되면 run()메서드를 바로 수행
- Blocked : 실행중인 스레드가 sleep(), join() 메서드를 호출하게 되면,
Blocked 상태가 된다. Blocked 상태가 되면 스케줄러에 의해서
선택받을 수 없다.
- Dead : run()메서드의 실행을 모두 완료하게 되면 스레드는 Dead상태가 된다.
할당받은 메모리와 정보 모두 삭제된다.
<스레드의 생명주기(Thread Life Cycle)
new Thread() -> new -> start() -> Runnable
-> JVM Schaduler -> Running -> sleep() or join()
-> Time_Waiting or Blocked -> unblocked -> Runnable
-> JVM Schaduler -> Running -> Dead
스레드를 Blocked 상태로 만드는 메서드
[1] sleep()
: 스레드를 지정한 시간 동안 block상태로 만든다.
시간은 1000분의 1초까지 지정할 수 있으며, 지정된 시간이 지나면
다시 runnable(실행 가능한)상태로 돌아간다.
<실습> Sleep2
sleep()의 block 효과를 이용한 카운트다운
[2] yield()
: 자신의 시간을 양보하는 메서드
스레드가 작업을 수행하던 중 yield()를 만나면,
자신에게 할당된 시간을 다음 차례 스레드에게 양도
<실습>Yield1
★를 찍는 스레드가 yield()메서드를 호출 시 결과
[3] join()
: 특정한 스레드가 작업을 먼저 수행할 때 사용
실행 순서를 지켜야 하는 스레드를 제어
<실습>Join1
join()메서드를 알아보는 코드
'멘토씨리즈 JAVA' 카테고리의 다른 글
45강 입출력 / 자바의 IO 패키지 (0) | 2022.05.11 |
---|---|
44강 스레드3 (0) | 2022.05.10 |
42강 스레드1 (0) | 2022.05.10 |
41강 컬렉션 프레임 웍 연습2 / 정렬(sort) (0) | 2022.05.10 |
40강 컬렉션 프레임 웍 연습1 / 고객 관리 프로그램 (0) | 2022.05.09 |