본문 바로가기

Programming Study/안드로이드

스레드(Thread)


스레드(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