package ex19;
//콜백
class Store implements Runnable {
int qty;
@Override
public void run() {
// 통신 -> 다운로드
try {
Thread.sleep(100); // 타이밍
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
qty = 5;
}
}
/*
사용 이유 : 동시에 해야할 때, I/O가 일어날 때
스레드에서 받은 데이터를 리턴 받아서 응용하고 싶을때!!
1. 타이밍 맞추기 (임시방편 - 그래도 쓰는 사람 많음) Thread.sleep();
2. 리스너 (부하가 너무 큼)
3. 콜백 (제일 좋음)
*/
public class Th06 {
public static void main(String[] args) {
int totalQty = 10;
Store store = new Store();
Thread t1 = new Thread(store);
t1.start();
try {
Thread.sleep(200); // 타이밍
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("재고수량 :" + (store.qty + totalQty));
}
}

package ex19;
//콜백
class Store implements Runnable {
Integer qty;
@Override
public void run() {
// 통신 -> 다운로드
try {
Thread.sleep(100); // 타이밍
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
qty = 5;
}
}
/*
사용 이유 : 동시에 해야할 때, I/O가 일어날 때
스레드에서 받은 데이터를 리턴 받아서 응용하고 싶을때!!
1. 타이밍 맞추기 (임시방편 - 그래도 쓰는 사람 많음) Thread.sleep();
2. 리스너 (부하가 너무 큼)
3. 콜백 (제일 좋음)
*/
public class Th06 {
public static void main(String[] args) {
int totalQty = 10;
Store store = new Store();
Thread t1 = new Thread(store);
t1.start();
while (true) { // 직관적이고 공부하기 좋음
if (store.qty != null) break;
try {
Thread.sleep(10);
System.out.println("지켜본다.");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println("재고수량 :" + (store.qty + totalQty));
}
}

package ex19;
//콜백
// 1. 콜백 메소드 만들기
interface CallBack { // 2. interface만들기
void 입고(int qty); // 3. ()안에 리턴 받고 싶은 파라미터를 만들어준다.
}
class Store implements Runnable {
CallBack callBack;
Integer qty;
// 4. 리턴이 필요한 곳으로 가서 콜백 메소드 전달받기
public Store(CallBack callBack) {
this.callBack = callBack;
}
@Override
public void run() {
// 통신 -> 다운로드
try {
Thread.sleep(100); // 타이밍
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
qty = 5;
callBack.입고(qty); // 종료시 콜백 메소드 호출
}
}
/*
사용 이유 : 동시에 해야할 때, I/O가 일어날 때
스레드에서 받은 데이터를 리턴 받아서 응용하고 싶을때!!
1. 타이밍 맞추기 (임시방편 - 그래도 쓰는 사람 많음) Thread.sleep();
2. 리스너 (부하가 너무 큼)
3. 콜백 (제일 좋음)
*/
public class Th06 {
public static void main(String[] args) {
int totalQty = 10;
Store store = new Store(qty -> {
System.out.println("재고수량 :" + (qty + totalQty));
});
Thread t1 = new Thread(store);
t1.start();
}
}

Share article