상세 컨텐츠

본문 제목

자바 (자바강좌) 스레드 관련

JAVA

by AlrepondTech 2016. 10. 27. 14:56

본문

반응형

 

 

=================================

=================================

=================================

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=ish430&logNo=40211947101&categoryNo=18&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1

 

 

 

(자바강좌)스레드 !

 

 

 

안녕하세요 ^^

 

오늘은 스레드에 대해서 간략하게 포스팅을 해봅니다 !

 

여지껏 프로그래밍하시던 분들을 통해 스레드, 다중 스레드란 말들을

 

많이 들어보셨을 거에요.

 

 

스레드는 간략하게 말해서 하나의 순차 프로그램으로 아시면 되고,

 

그 것들을 동시에 수행한다해서 다중 스레드입니다.

 

다중 스레드같은 경우 동시에 실행한다고 말을 하지만, 실질적으로

 

프로세서가 여러개의 프로그램을 왔다갔다하면서 실행시키는 것이기

 

때문에, '동시'라는 말보다는 여러 프로그램들을 빠르게 하나씩 처리!

 

한다고 보는게 좋겠군요.

 

 

우선 스레드가 뭔지 알아봅시다.

 

 

 

(자바강좌)스레드란?

 

 

스레드는 순차 프로그램과 유사하게 시작, 실행, 종료의 실행 순서를

 

가집니다. 스레드 실행시간 동안 임의 시점에서 단일 실행 점을 갖죠.

 

스레드라는 것은 그 자체는 프로그램이 아니므로 홀로 실행될 수 없고,

 

프로그램 내에서만 실행이 가능합니다.

 

스레드는 프로그램 내부에 있는 제어의 단일 순차 흐름으로 생각할 수

 

있겠죠.

 

이러한 프로그램을 하나 실행하게 되면 프로세서가 이 프로그램을

 

처리하게 됩니다. 그런데 이러한 프로세스가 여러개 존재하여

 

여러개의 스레드를 처리한다면 이 것이 바로 멀티프로세싱이라

 

말하며, 하나의 프로세스 내에 여러 개의 스레드가 존재한다면

 

이 것을 멀티 스레딩이라 말합니다.

 

 

 

아직도, 이해가 안 가신다면 아주 쉽게 설명해드리죠.

 

 

 

음..? 왠 갑자기 헬로우 월드 ?

 

 

지금 현재 이 프로그램을 실행시키면서 무슨 일이 일어났죠 ?

 

시작, 실행, 종료 순서가 존재했을 겁니다.

 

즉, 이 작은 main 조차도 스레드라고 할 수 있습니다.

 

간단하게 봐서 저희가 소스로 짜서 실행한 프로그램이 스레드라고

 

할 수 있습니다 ^^

 

자, 그럼 이제 다중 스레드란 것을 해보죠.

 

다중 스레드를 하려면 스레드 클래스를 새로 만들어서 실행시키면

 

됩니다.

 

 

우선 ExternalThread란 클래스를 만듭니다. 이 클래스를 만드실 때

 

Thread 클래스로부터 상속받으셔서 스레드 클래스를 만드는 겁니다.

 

 

 

 

이렇게 됬을 경우, 이제 다중 스레드를 실행시키려면

 

실행시킬 프로그램내에서 스레드 클래스의 객체를 생성한 후,

 

start()메소드를 호출하면 스레드 클래스의 내용이 실행되어

 

다중 스레드가 되는 것입니다.

 

 

 

 

 

 

반응형

 

 

728x90

 

 

 

 

아래 Console창 보시면 Hello World와 This is ExternalThread 문구가

 

함께 뜬 것을 보실 수 있습니다.

 

 

이렇게 해도 이해가 안 가신다 !

 

 

음...동시에 실행된 것처럼 보이지 않아서 곤란하군요.

 

이번엔 다른 방법으로 바꿔보겠습니다.

 

 

 

 

이번엔 스레드클래스에서 000 이라는 문구를 1000번 띄울 겁니다.

 

그런데 이제 1초에 한번씩 뜨게 하려고 하는데요,

 

이렇게 하려면 sleep 이라는 메소드를 호출해줍니다.

 

sleep 메소드를 호출할 경우, 지정된 시간이 반드시 지나야 그 다음 진행을

 

하게끔 합니다.

 

sleep(1000);

 

매개변수에 들어간 숫자는 1초에 1000 이라고 보시면 됩니다.

 

즉 저렇게 할 경우 000 이라는 문구가 1초에 한번씩 출력될 것입니다.

 

 

그 다음엔 main으로 가보시죠.

 

 

 

 

main에서는 숫자 0부터 999까지 0.3초마다 출력하게 했습니다.

 

그리고 ExternalThread 클래스의 스레드를 호출했군요.

 

그러면 어떻게 될까요 ?

 

재밌는 현상이 일어납니다.

 

0.3 초마다 0부터 999까지 출력되고, 1초마다 000 이 나올것입니다.

 

즉. 두 프로그램이 동시에 실행되겠죠.

 

 

 

 

 

 

스레드 종료는 어떻게 할까요 ?

 

스레드 종료는 run()메소드 호출이 끝났을 때를 의미합니다.

 

스레드가 죽었다.라고들 많이 말하죠.

 

즉, run() 메소드에 루프가 완료되어 run() 메소드가 종료될 때

 

자연스럽게 종료됩니다.

 

잉? 종료됬는지 어떻게 알까요 ?

 

그럴땐 isAlive() 메소드를 호출해보세요 !

 

스레드가 죽었는지 확인하실 수 있답니다.

 

false면 Dead상태, true면 아직 스레드가 살아있다는 의미입니다.

 

 

 

 

 

 

 

 

 

 

[실행결과]

 

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역