스레드(Thread)는 프로세스 내에서 동작하는 작은 실행 단위이며, 경량 프로세스라고 부르기도 한다.
스레드를 이용하면 동시에 여러 작업을 수행할 수 있다.(멀티스레드; multi-thread)
한 프로세스 내에서 여러개의 스레드를 실행 할 수 있기 때문에 스레드를 잘못 사용할 경우에는 해당 애플리케이션이 오동작할 수 있으며, 오동작할 경우는 원인을 찾는 것이 쉽지 않을 수 있다.
스레드는 분명 애플리케이션을 작성할 때 매우 유용한 기술이지만, 내부적인 복잡도로 인해 제대로 사용하는 것이 어려운 것이 사실이다. 그래서 안드로이드에서는 이러한 스레드를 좀 더 쉽게 다룰 수 있도록 여러 기능들을 제공한다.
※ 스레드의 정의
프로세스보다 작은 단위이기 때문에 프로세스보다 가볍다.
스레드는 서로 자원을 공유하면서 동작한다.
경량 프로세스(Lightweight process)라고도 한다.
※ 스레드 생성 방법
스레드는 두 가지 방식으로 생성 할 수 있다.
① Thread 클래스를 상속하는 것
② Runnable 인터페이스를 구현하는 것
스레드 생성 밥법이 두가지인 이유를 보자면
자바는 내부적인 복잡도를 줄이기 위해 다중 상속을 지원하지 않는다. 그래서 오로지 한 개의 클래스만을 상속할 수 있으며, 이로 인해 이미 다른 클래스를 상속하는 클래스는 Thread 클래스를 상속할 수 없다. 그래서 Runnable 인터페이스를 추가해서 이미 다른 클래스를 상속하고 있더라도 스레드로 만들 수 있게 하였다.
(1) 스레드 생성 - Thread 상속
스레드 클래스로 만들고자 하는 클래스가 어떤 클래스도 상속하고 있지 않을 경우에는 Thread 클래스를 사용해서 스레드 클래스를 만들 수 있다. Thread 클래스를 상속하고 스레드 몸체로 동작할 run()메소드를 작성하기만 하면 된다.
class MyThread extend Thread(){ public void run(){ } } |
이렇게 생성한 클래스를 실행하고 싶다면 아래처럼 코드를 작성하면 된다. Thread 클래스를 생성하고 start() 호출시킨다.
이때 start()메소드는 해당 클래스를 스레드 스케줄링 알고리즘에 기반하여 적당한 때에 run() 메소드를 호출해준다.
MyThread t1 = new MyThread(); t1. start(); |
다음은 Thread 클래스의 생성자와 메소드이다.
Thread() 새로운 스레드 객체를 생성한다. |
Thread(String name) 새로운 스레드 객체를 지정된 이름으로 생성한다. |
void | run() 스레드가 생성되어 실행 될때 호출되는 메소드이다. |
(2) 스레드 생성 - Runnable 인터페이스 구현
Runnable 인터페이스를 사용할 경우에는 스레드로 만들고자 하는 클래스의 다른 클래스 상속 여부는 중요하지 않다.
어떤 클래스라도 스레드로 만들 수 있는 것이 Runnable 인터페이스를 구현하는 방법이다.
Runnable 인터페이스를 implements를 상속해서 선언하고 run() 메소드를 작성하기만 하면 된다.
class MyThread implements Runnable{ public void run(){ } } |
Runnable 인터페이스를 구현해서 클래스를 생성했다면 이제 이 클래스를 아래처럼 실행시키면 된다.
주의해야 할 것은, Runnable은 단순히 인터페이스일 뿐이므로 start() 메소드를 가지고 있지 않으므로 이 클래스를 Thread 클래스에 인자로 넘겨주어야 한다.
MyThread t1 = new MyThread(new MyThread()); t1. start(); |
다음은 Runnable의 생성자와 메소드이다.
Thread(Runnable target) 새로운 스레드 객체를 생성한다. 이때 target은 run() 메소드를 호출할 객체이다. |
Thread(Runnable target, String name) 새로운 스레드 객체를 지정된 이름으로 생성한다. 이때 target은 run() 메소드를 호출할 객체이다. |
void | run() 스레드가 생성되어 실행 될때 호출되는 메소드이다. |
'Programming Study > 안드로이드' 카테고리의 다른 글
서피스뷰(SuraceView) (0) | 2011.08.05 |
---|---|
안드로이드 로그 (0) | 2011.08.02 |
레이아웃 (0) | 2011.08.02 |
안드로이드에서 지원하는 이미지 형식 (0) | 2011.08.02 |
안드로이드 치수 (0) | 2011.08.02 |