비동기 처리
cf) 자바에서는 메서드를 넘기지 못함 --> 메서드를 넘기기 위해서는 class를 생성해서 통째로 넘김
요청 시 해당 동작이 바로 실행 되지 않을 때,
해당 값이 들어오면 해당 동작이 실행되도록 한다.
ex) 친구가 아이스크림을 요청했는데, 아이스크림이 없을 때 빈 박스를 받게 된다.
아이스크림이 없는 빈 박스는 열리지 않고, 아이스크림이 박스에 들어오면
박스가 열리면서 동작이 실행된다.
(Future API)
원래 통장 잔액은 10000원, 3초 후 30000원이 출력되는 프로그램
메인쓰레드와 동시에 실행
package ch13;
interface Callback {
void printMoney(int money);
}
class MoneyChange {
int money = 10000;
public void accept(Callback callback) {
// 은행에 인출요청해서 20000원을 받을 예정 : 2초걸림
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
money = money + 20000;
callback.printMoney(money);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
public class ThreadEx03 {
public static void main(String[] args) {
MoneyChange mc = new MoneyChange();
mc.accept(new Callback() {
@Override
public void printMoney(int money) {
System.out.println("통장의 잔액은 : " + money);
}
});
for (int i = 1; i < 6; i++) {
System.out.println("메인스레드 : "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}