●쓰레드(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);

}

}

}

 










Posted by -현's-

댓글을 달아 주세요