본문 바로가기

강좌/JAVA THREAD

자바 쓰레드(Thread) - start()와 run()에 대한 예제

start()와 run()에 대한 예제를 보자.

 

간단한 예제를 보자.

아래 두개의 클래스가 있다.

우선 메인 메소드가 있는 클래스에서 다른 클래스(스레드를 상속받은) 객체를 생성하고

start()메소드를 호출하면 스레드가 생성이 된다. 이 말은 start()를 호출하면 run()메소드가 호출되고

그 후 다시 시점은 메인메소드가 있는 클래스로 돌아 온다.

물론 run()에 의한 스레드는 독립적으로 작동이 되는 것이다.

그래서 main()에서 실행된 스레드 그리고 start()에 의한 스레드 총 2개가 있다.

 

그럼 아래 예제에서 보면 스레드를 상속받은 클래스에서 일부러 stack을 trace해보았다.

 

 위의 오류를 보면 main메소드에서 실행되는것이 아니라 run->throwException으로 두단계로 끝냈다.

 

두번째 그렇다면 직접 메인메소드에서 start()를 호출하지 않고 run()을 호출되면 어떻게 될까?

아래예제는 직접 run()를 호출하였다.

 

stack trace를 보자.

보면 3단계로 되어 있다. main() -> run() -> throwException

이 말은 스레드가 생성이 된게 아니고 main()에 의한 스레드 즉 1개의 스레드가 쭉 내려 간것일 뿐이다.

이렇게 하면 안된다. 

 

 

또 다른 예제를 보자.

단순 덧셈 계산하는 로직을 만들자. user부터 숫자를 입력받고 총합을 구하는 로직.

시간이 길어지면 "잠시만 기달려주세요!" 라는 메세지를 띄우자(jQuery 처럼)

 

결과를 보면 main과 run은 따로 움직이는걸 볼 수 있다.