개발/Java
[Android, Java] Main Thread에서 sub Thread 로 값 넘겨주기
yeonlee
2023. 4. 10. 12:05
일반적으로 thread 를 실행하는 방법
일반적으로 thread 를 실행하는 방법은 다음과 같다
final static int AAV_GET_MSG_BUFFER_MAX = 301;
int mySend(String msg) {
final int[] r = new int[1];
r[0] = 0;
Thread th = new Thread(new Runnable() {
@Override
public void run() {
CGMessage cgMsg = new CGMessage(7);
cgMsg.setMsgStatus(AAV_CG_MSG_START_END);
cgMsg.setOut(getConnectedOutStream());
cgMsg.setIn(getConnectedInStream());
r[0] = cgMsg.sendToPeer(); if (r[0] < 0) return;
}
});
th.start();
try { th.join(); } catch (InterruptedException e) { }
return r[0];
}
thread 를 선언과 동시에 안에서 할일을 정해서 start, join 같은걸 해주면 된다.
main thread 의 값을 넘겨받으며 실행하는 방법
그런데 main thread 의 값을 넘겨줘야 할 일이 생긴다면?
Runnable class 를 다시 설정해주는 식으로 진행해야 한다.
public class MsgRunnable implements Runnable {
private CGMessage msg;
final int[] r = new int[1];
public MsgRunnable(CGMessage msg) {
this.msg = msg;
}
@Override
public void run() {
r[0] = 0;
msg.setOut(getConnectedOutStream());
msg.setIn(getConnectedInStream());
msg.setBufferSize(getConnectedBufferSize());
r[0] = msg.sendToPeer(); if (r[0] < 0) return;
}
}
int mySendCG(CGMessage msg) {
Thread th = new Thread(new MsgRunnable(msg));
th.start();
try { th.join(); } catch (InterruptedException e) { }
return 1;
}
MyRunnable class 를 새로 만든 후 받고싶은 값을 지역변수로 저장해주는 변수를 만들어서
생성자로 받은 msg를 지역변수에 저장해준다
그 다음 하고싶은 일을 run 멤버 안에서 진행해주면 된다