●쓰레드(Thread)
- OS가 여러 프로세스를 동시에 처리하듯, 자바의 JVM도 세부 실행부를 생성하여 독립적으로 실행할 수 있는데, 이러한 독립적 세부 실행단위를 '쓰레드'라고 부른다.
- 특정 클래스를 쓰레드 클래스로 정의할 경우, 메인 실행부와는 별도로 독립적인 수행단위가 될 수 있다.
- 개발자가 독립적으로 수행할 코드를 run메서드에 작성해야 한다.
- run메서드는 개발자가 직접 호출해서는 안된다. 실행여부는 시스템인 JVM이 결정해야 한다. 만일 개발자가 run메서드를 호출하면 메인쓰레드가 실행되므로 그냥 일반 메서드 취급된다. 그래서 start()로 호출해야한다.
- 쓰레드는 run메서드가 끝날때 죽는다. 만약 run()안에 무한루프를 넣으면 run()메서드가 끝나지 않아서 쓰레드가 죽지 않게 된다.
- 안드로이드의 메인쓰레드는 사용자의 입력을 담당하므로 네트워크 통신이나 루프처리 등에 이용할 경우 앱이 멈춘다. 그래서 네트워크 통신, 루프처리는 별도의 쓰레드를 생성해서 처리해야한다.
●예제
- ThreadTest.java
package study.thread; import android.app.Activity; import android.os.Bundle; public class ThreadTest extends Activity{
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
//직접 만든 쓰레드를 이용 //쓰레드 생성 WhiteThread whiteThread = new WhiteThread(); BlackThread blackThread = new BlackThread();
//쓰레드 실행 whiteThread.start(); blackThread.start();
}
} |
- BlackThread.java
package study.thread; public class BlackThread extends Thread{ int count=0;
public void run() { while(true){ // try { //1/1000초 단위로 입력하면 해당 시간동안 non-runnable상태로 빠지게 된다. //1000을 입력하면 1초 쉰다. Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
count++; System.out.println("★ "+count); }
}
} |
- WhiteThread.java
package study.thread; public class WhiteThread extends Thread{
int count=0;
public void run() { while(true){ // try { //1/1000초 단위로 입력하면 해당 시간동안 non-runnable상태로 빠지게 된다. //1000을 입력하면 1초 쉰다. Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
count++; System.out.println("☆ "+count); }
}
}
|
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 애니메이션2 (0) | 2015.03.30 |
---|---|
안드로이드 핸들러(Handler) (0) | 2015.03.30 |
안드로이드 애니매이션1 (Animation) (0) | 2015.03.25 |
안드로이드 캔버스(Canvas) (0) | 2015.03.25 |
안드로이드 리스트뷰2 (ListView), Adapter 재정의 (0) | 2015.03.25 |
댓글