[Java] 86. Thread가 return해야할 때

백하림's avatar
Feb 21, 2025
[Java] 86. Thread가 return해야할 때
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)); } }
notion image
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)); } }
notion image
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(); } }
notion image
Share article

harimmon