바뀜

둘러보기로 가기 검색하러 가기

스레드(Thread)

1,906 바이트 추가됨, 2019년 12월 27일 (금) 15:49
편집 요약 없음
어떤 자바 애플리케이션건 메인 스레드는 반드시 존재하기 때문에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하면 됩니다. 자바에서는 작업 스레드도 객체로 생성되기 때문에 클래스가 필요합니다. java.lang.Thread 클래스를 직접 객체화해서 생성해도 되지만, Thread 클래스를 상속해서 하위 클래스를 만들어 생성할 수도 있습니다.
 
== Thread 클래스로부터 직접 생성 ==
 
java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 다음과 같이 Runnable 을 매개값으로 갖는 생성자를 호출해야 합니다.
 
<nowiki>
Thread thread = new Thread(Runnable target);
</nowiki>
 
Runnable은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체라고 해서 붙여진 이름입니다. Runnable은 인터페이스 타입이기 때문에 구현 객체를 만들어 대입해야 합니다. Runnable 에는 run() 메소드 하나가 정의되어 있는데, 구현 클래스는 run() 을 재정의해서 작업 스레드가 실행할 코드를 작성해야 합니다.
 
<nowiki>
class Task implements Runnable {
&nbsp;&nbsp;public void run() {
&nbsp;&nbsp;&nbsp;&nbsp;스레드가 실행할 코드;
&nbsp;&nbsp;}
}
</nowiki>
 
Runnable은 작업 내용을 가지고 있는 객체이지 실제 스레드가 아닙니다. Runnable 구현 객체를 생성한 후, 이것을 매개값으로 해서 Thread 생성자를 호출해야 비로소 작업 스레드가 생성됩니다.
 
<nowiki>
Runnable task = new Task();
 
Thread thread = new Thread(task);
</nowiki>
 
코드를 좀 더 절약하기 위해 Thread 생성자를 호출할 때 Runnable 익명 객체를 매개값으로 사용할 수 있습니다. 오히려 이 방법이 더 많이 사용됩니다.
 
<nowiki>
Thread thread = new Thread(new Runnable() {
&nbsp;&nbsp;public void run() {
&nbsp;&nbsp;&nbsp;&nbsp;스레드가 실행할 코드;
&nbsp;&nbsp;}
}
</nowiki>
 
작업 스레드는 생성 즉시 실행되는 것이 아니라, start() 메소드를 다음과 같이 호출해야만 비로소 실행됩니다.
 
<nowiki>
thread.start();
</nowiki>
 
start() 메소드가 호출되면, 작업 스레드는 매개값으로 받은 Runnable의 run() 메소드를 실행하면서 자신의 작업을 처리합니다.
 
== 예제 ==
 
 
[[분류:자바]]

둘러보기 메뉴