메인스레드 X는 스레드 A를 실행시킴
Thread A는 네트워크상의 특정 문자열을 받아옴
Listener M은 A의 작업결과를 받아와서 메인스레드 X의 String str에 저장함
그러면 메인스레드 X에서
Listener M = new Listener(){
@Override
public void onThreadFinished(String text){
str = text;
};
A.setListener(M);
A.start();
//do something
A.join();
doSomething(str);
하면 str에는 A가 받아온 텍스트가 들어있는건가요?
야임마 그건 쓰레드로 하는게 아니라 future로 하는거야... - return 0;
자바에는 Promise같은거 업서??
Listener 등록하면 다 알아서 해주는건가
promise 같은거 있다. 그리고 지금 필요한건 promise라기 보다는 future임 - return 0;
future가 뭔가요? 지금 보고 있는 자바책엔 없는데...
thread를 직접 쓰는게 아니라 future라는 기능을 쓰게 되면, 예를 들어 니가 반환 받으려는게 String 이잖아? 그러면 String이 들어있는 future를 쓰레드로 실행한 함수가 반환해줘. 그 future를 들고 있는 동안 쓰레드가 뒤에서 계속 돌면서 future의 값을 만들어내고, 니가 이제 그 값이 필요할 때 받아씀 - return 0;
받아쓰는 순간에 값이 완성됐으면 그냥 받아쓰는거고, 완성이 안됐으면 완성될 때까지 거기서 기다리게 됨 - return 0;
http://www.nurkiewicz.com/2013/02/javautilconcurrentfuture-basics.html?m=1
- return 0;
안드로이드 코드인가? 자바 순정은 아닌듯보이는데
문맥으로 판단해보면 A.start() 다음에 뭔가 코드가 더 필요하진 않고 바로 A.join을 가져오면됨. 메인스레드가 해야할일은 A를 작동시키고나서 A가 끝날때까지 기다리는것만 하면 되니까. 그리고 보통 슬립상태의 스레드를 깨울때 인터럽트를 거니까 A.join을 try-catch로 감싸서 InterruptException을 핸들링하면 좋을듯. IDE쓰면.. 빨간줄안뜨면 그냥 넘겨도 됨.
글고 무슨책을 쓰는진 모르겠지만.. 책이 좀 낡은거같다.
Future란거 구현을 promise 로 하는거임 ㅇㅇ