비동기 처리

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();
			}
		}
	}

}

openclose