본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 25일차 -43

by oncerun 2020. 4. 1.
반응형

JAVA Thread 기초 사용법

첫 번째 방법으로 Thread를 상속받아서 사용하는 방법이 있다.

Thread를 상속받게 되면 main스레드와 별개로 또 다른 흐름을 만들어줄 수 있는데

그 또 다른 흐름을 작성하는 곳은 Thread클래스의 run() 메서드 안에서 작성하게 된다.

 

스레드에서 예외가 발생하는 경우를 대비해서 try catch문으로 예외가 발생했을때 처리하는 구문을 만들어주며

보통 InterruptedException으로 작성한다. 만약 무거운 프로그래밍이 쓰레드에 안에서 반복적으로 작동하고 있는데

갑작스럽게 스레드를 종료시켜야할 경우 사용하기 위함이다. stop()이라는 쓰레드를 종료시켜주는 메서드가 있긴 하지만

이 stop() 메서드는 deprecated 되었는데 그 이유는 스레드를 갑작스럽게 종료시키면 쓰레드가 사용하고있는 자원이 불안정한 상태로 남게되기때문이다. 쓰레드를 자연히 종료시켜주는 방법이 가장 좋은 종료인데 interrupts예외를 외부에서 발생시켜서 예외가 생겼을 경우 catch문에서 종료하도록 유도하는 것이 올바른 방법이다.

 

이제 Example 클래스 안에 0부터 5까지 출력하는 스레드를 run() 메서드 안에 작성한 뒤

메인스레드안에서 start()라는 메소드를 이용해 run()메소드를 호출하여 쓰레드 내용을 볼 수 있는데

중간에 Thread.sleep(1000)이라는 코드는 스레드를 1초 동안 잠시 일시 대기상태로 만들게 되는 코드이다.

package blog;
//첫번째 Thread상속
public class Example extends Thread {
	
	@Override
	public void run() {
		
		try {
			for(int i= 0 ; i <=5 ; i++) {
				Thread.sleep(1000);
				System.out.println(i);
			}
			
		} catch (InterruptedException e) {
			// InterruptedException 인터럽트 예외를 사용한다.
			//쓰레드를 사용중지시키기위해 인터럽트예외를 발생시켜 쓰레드가 
			//자연히 종료되도록 하기위함이다.
		}
	}
	public static void main(String[] args) {
		Example thread = new Example();
		thread.start();//쓰레드를 상속받은 클래스에서는 run()메소드를
						//실행시키기위한 start()메소드가 준비되어있다.
		
		//메인쓰레드
		for(int i= 0 ; i <=5 ; i++)
			System.out.println(i);
	}

}

 

또 다른 방법으로는 implements로 Runnable을 상속받아 사용하는 방법이 있는데

Runnable을 상속받게 되면 강제적으로 run() 메서드를 오버라이드하게하는 인터페이스입니다.

위 예제와 똑같이 run()메소드를 구현한 뒤 main함수에서 이번에는 Thread를 상속받지 않았기 때문에 Thread의 인스턴스를 생성해줍니다. 생성해줄 때 중가로 () 안에서 target을 설정해주는데 Example의 인스턴스를 target으로 넣어줍니다.

그 뒤 start() 메서드를 실행시켜주면 메인 함수와 별개로 다른 흐름을 가지게 합니다.

 

 

 

반응형

댓글