article thumbnail image
Published 2022. 12. 6. 16:32
반응형

스레드 두 번째 내용입니다 

 

스레드는 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
복사했습니다!