안드로이드 개발 질문/답변
(글 수 45,052)
쓰레드를 동시에 3개 연달아 사용했더니
이상한 결과가 나옵니다.
혹시 한쓰레드를 모두한뒤, 다음 쓰레드를 할수있는 방법이있을까요/??
2011.12.20 15:56:00
쓰레드 우선 순위 관리하는게 있기는 한데..ㅎ 라줄 몰라서..ㅎㅎㅎ 전 핸들러를 통해서 했음
핸들러 만드신 후에 각각의 what값에 서로 다른 쓰레드를 실행 시키시면 될 듯..
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
//처음 쓰레드
break;
case 2 :
//두번쨰 쓰레드
break;
}
}
쓰레드 끝날때 마다 핸들러의 what을 넘겨서 다음 쓰레드를 실행 하면 될듯 하네요
2011.12.20 17:28:04
쓰레드에서, 다른 쓰레드가 끝날때 까지 기다리는 것은, join 메서드 입니다. 인자로 Thread 객체를 넘기면 됩니다. 만약 t 쓰레드가 돌고 있고, 다른 쓰레드에서 join(t); 해버리면, 그 쓰레드는 그 라인에서 t 가 종료될 때까지 기다립니다. 쓰레드를 사용하신다면, Thread 에 관해서 조금 찾아보시고, Thread 차원에서 해결하시는 것이 성능상과 동기화 관련해서 문제가 없을 듯 합니다.




핸들러를 받을수 있는 스레드 클래스를 만듭니다.
/*종료 후 처리 핸들러*/
final Handler handler = new Handler(){
public void handlerMessage(Message msg){
/*종료 후 처리 문장
ex) 새로운 스레드를 호출 한다
Test2 test2 = new Test2(handler);
test2 = setDaemon(true);
test.start();
*/
}
/*1번 스레드 클래스*/
public class Test1 extends Thread{
Handler mHandler;
boolean end = false;
public Test(Handler h){
mHandler = h;
}
public void run(){
while(!end){
/*스레드 처리*/
}
Message msg = mHandler.obtainMessage();
mHandler.sendMessage(msg);
}
/*2번 스레드 클래스*/
public class Test2 extends Thread{
Handler mHandler;
boolean end = false;
public Test(Handler h){
mHandler = h;
}
public void run(){
while(!end){
/*스레드 처리*/
}
}
/*1번 클래스 호출*/
Test1 test = new Test1(handler);
test.setDaemon(true);
test.start();
이것을 원하시는 건지 모르겟네요.
손으로 보면서 적은거라 오타가 있을수도 있구요
안될수도 있습니다. 보시면 대충 어떻게 돌아 가는지 아실 껍니다.
더 좋은 방법은 아랫분이^^;