스레드는 정말 산넘어 산이네요...
아래 소스는 간단히 스레드 돌리는 건데요
제 생각엔
스레드 : 0
핸들러 : 0
스레드 : 1
핸들러 : 1
스레드 : 2
핸들러 : 2
스레드 : 3
핸들러 : 3
이렇게 쭉 나올줄 알았는데 순서가 뒤죽박죽 나오네요..
제가 뭔가 잘못 이해한것 같은데...어떻게 해야 위처럼 순서대로 나올까요...
동기화를 이용하면 된다고 하시는데 어떻게 하면 순서대로 나오는지 아래코드 수정좀 부탁드리겠습니다...ㅜ.ㅜ
package com.thread;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class Thread_Test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new Runnable() {
@Override
public void run() {
for(int a=0;a<1;a++){
System.out.println("for문 : "+a);
Message m = Message.obtain(mHandler, a);
mHandler.sendMessage(m); // 핸들러 호출
}
}
}).start();
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
System.out.println("핸들러 : "+msg.what);
}
};
}




스레드로 일부로직을 뺀다고 하더라도 스레드의 한 동작이 끝나기 전까지 UI스레드가 대기하지 않으면,
그리고 UI스레드의 한 동작이 끝날때 까지 스레드가 대기하지 않으면
절대로 같은 결과를 얻을 수 없습니다. 그러면 스레드를 쓰는 의미가 전혀 없죠....
만약 스레드가 핸들러가 하는 동작보다 상당히 시간이 오래걸리는 동작을 한다면
현재 상태로도 원하는 결과를 얻을수 있습니다.
오히려 그런 경우는 현재 상태가 훨씬 좋습니다.