
스레드 두 번째 내용입니다
스레드는 6가지의 상태가 있습니다
NEW 생성은 되었지만 준비되지 않은 상태입니다
RUNNABLE 실행 중이거나 준비되어있는 상태입니다
WAITING 다른 스레드가 호출하기를 기다리는 상태입니다
TIMED_WATING 스레드가 sleep 메서드로 자는 상태입니다
BLOCK 스레드가 다른 작업 요청으로 인해 멈춘 상태입니다
TERMINATED 종료
이처럼 여섯가지의 상태가 있고
스레드는 JVM이 어떤 상태인지 기록하고 관리합니다 ㅎㅎ
음 그리고 스레드가 우선순위를 정할 수 있어요
setPriority 메서드를 이용해서 가능합니다 ㅎㅎ
먼저 스레드를 생성하는 클래스를 살짝만 수정해줍시다
생성자를 만들어주고 getName으로 어떤 스레드가 먼저 실행하는지
확인해보도록 합시다
package studyProject;
public class ThreadTest extends Thread{
//생성자
ThreadTest(String str){
super(str);
}
public void run() {
try {
for(int i = 0 ; i < 10 ; i++) {
// 딜레이 0.5초
Thread.sleep(500);
System.out.println(getName() + " : " + i);
}
} catch(InterruptedException e) {
System.out.println(e);
}
}
}
자 생성자를 만들고 print 구문에 getName메서드로 어떤 스레드인지 출력합니다
이후에 main에서는 우선순위를 지정해줍니다
ThreadTest test1 = new ThreadTest("테스트1");
ThreadTest test2 = new ThreadTest("테스트2");
//우선순위 낮음
test1.setPriority(Thread.MIN_PRIORITY);
//우선순위 높음
test2.setPriority(Thread.MAX_PRIORITY);
test1.start();
test2.start();
이 코드로 실행하면 아마 테스트1 스레드가 먼저 실행되고 나서 테스트 2 스레드가
실행될 겁니다 확인해보면
출력 순서를 보면 테스트 2 스레드가 먼저 실행됩니다

번갈아 가며 실행되지만 우선순위가 높은 테스트 2 스레드가 먼저 실행됩니다
그리고 스레드는 강제 종료할 수 있습니다 ㅎㅎ
코드는 이러한 방식으로 작성 했습니다
ThreadTest test1 = new ThreadTest("테스트1");
test1.start();
try {
Thread.sleep(4000); //4초뒤에 종료
} catch(InterruptedException e) {
}
test1.interrupt();
스레드 클래스는 이와 같은 방식으로 작성해두고 무엇 때문에 종료되었는지 출력합니다
package studyProject;
public class ThreadTest extends Thread{
//생성자
ThreadTest(String str){
super(str);
}
public void run() {
try {
for(int i = 0 ; i < 10 ; i++) {
// 딜레이 0.5초
Thread.sleep(500);
System.out.println(getName() + " : " + i);
}
} catch(InterruptedException e) {
System.out.println("인터럽트로 쓰레드 종료 :"+e);
return;
}
}
}
실행하면 4초 뒤 종료되는 모습을 볼 수 있습니다

우리가 스레드를 사용하는 이유는
프로세스 간 통신보다 하나의 프로세스 안에서 여러 개의 스레드끼리의 통신이 부담이 더 없기 때문입니다
이 정도의 내용을 숙지하고 계시고 실무에서 방대한 스레드를 맞이하면 아마 다시금 스레드에 대한 내용을
찾으실 건데 그때 다시 확인하셔도 괜찮습니다 ㅎㅎ
무튼 오늘은 스레드에 대해서 알아봤습니다 감사합니다
'Developer > Java' 카테고리의 다른 글
[java]함수형 인터페이스 (0) | 2023.01.04 |
---|---|
[java]람다식 (0) | 2022.12.07 |
[java]스레드(Thread) (0) | 2022.11.29 |
[java]I/O_2 (0) | 2022.10.13 |
[java]I/O (0) | 2022.10.12 |