안드로이드 개발 질문/답변
(글 수 45,052)
TCP 모듈을 만들고있는 중인데요
public class RunThread extends Thread {
public void run(){
//할일못할일
}
}
public class RecvThread extends Thread {
public void run(){
//받기 호출
}
}
이렇게 호출하고요 받는쪽에선 따로 만들어진 클래스에서
in.read()
를 호출합니다.
문제는 in.read()에서 블락이 걸리면서
RunThread도 같이 블락이 걸린다는겁니다.
정확히 얼만큼의 데이터가 서버에서 올지 모르기때문에 리시브를 스레드로 이용해서 하고있구요.
서버는 이전에 만들어 사용했던 범용 C/C++ 서버입니다.
제가 너무 C/C++ 스타일에 습관이 들어서 그런지는 모르겠지만 자바는
당연히 in.read 에서 블락이 걸리면 RunThread.run() 으로 순차될줄 알고 기대했는데
RecvThread,run() 이 함수 끝까지 가지 못하면 RunThread()로 순서가 안넘어 가는겁니까?
아니면 제가 잘못한 무엇이 있는건지요...
해당 함수에서 in.read를 빼면 순차쓰레드로 잘 돌아갑니다.
그런데 블락되면 나머지도 같이 블락됩니다...
혹시 액티비티를 따로 써야한다거나 하는 C와 다른 무엇이 있는지...
ㅡ.,ㅡ




Thread의 실행은 start() 함수로 해야지 Async하게 돌아갈텐데요.
run()을 호출하면 그냥 같은 thread에서 작업이 이루어져 리턴이 되기전까지 block 되지요.