개발/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 멤버 안에서 진행해주면 된다