Thread(스레드)란?

2017. 3. 28. 19:43 from 리눅스

스레드란?

스레드(Thread) : 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델

 

우리는 일상 생활에서 동시에 여러 일을 처리하면서 살아간다.

이를 소프트웨어 관점에서 해석하면 사람을 프로세서(실행 중인 프로그램)로 볼 수 있고 각 독립적인 일의 단위를 스레드(Thread)라고 한다. 즉 하나의 프로세서에서 병렬적으로 여러 개 작업을 처리하기 위해서는 각 작업을 스레드화하여 멀티스레딩이 가능하게 해야 한다.

 

스레드를 생성할 때마다, 해당 스레드만을 위한 메모리 공간(Stack)을 Thread Stack이라 부르는데, 스택이 필요로 하는 동작을 위한 필요 공간을 따로 제공한다.

그 외의 공간은 본래의 프로세스 메모리 영역을 공유




프로세스가 CPU에 대한 사용권을 운영체제로부터 확보하면 일정 시간만큼 CPU에게 처리사항을 요청할 수 있는데 만약 이때 해당 프로세스가 멀티 스레드화되어 있다면 각 스레드 별로 주어진 시간을 다시 쪼개어 요구사항을 처리하게 한다. 이러한 방법으로 하나의 CPU를 통해 사용권을 시간에 따라 적절히 스위칭 함으로써 병렬처리가 가능하다.

 

자바에서 스레드를 구현하기 위해서는 라이브러리 중 Thread 클래스 또는 Runnable 인터페이스를 이용해야 한다.

두 객체는 말 그대로 클래스와 인터페이스라는 차이점이 존재할 뿐 동일한 방법으로 스레드를 지원한다.

 

Thread 클래스 활용 단계

 

단계1 사용자 정의 클래스로 Thread 클래스를 상속

단계2 스레드화하고자 하는 명령문을 Thread 클래스의 인스턴스 메서드인 void run()에 기술

단계3 Thread 클래스를 상속받은 사용자 정의 클래스의 인스턴스를 생성하여 인스턴스 변수에 저장

단계4 단계 3에서 생성한 인스턴스 변수에 의해 Thread 클래스의 인스턴스 메서드 void start() 호출

 

*병렬처리를 위한 코드가 담긴 void run() 메서드는 직접 호출하지 않고 void start() 메서드를 호출하면 JVM이 void run() 메서드를 호출

 

자바는 다중상속을 지원하지 않으므로 스레드화하고자 하는 객체가 이미 다른 클래스를 상속받았다면 해당 클래스를 스레드화하기 위해서는 Thread 클래스 대신 Runnable 인터페이스를 구현함으로써 문제를 해결할 수 있다.




출처 : http://threestory.tistory.com/3 [양민스쿨]

Posted by 나무길 :