inblog logo
|
devleekangho
    용어정리

    [디자인 패턴] 옵저버 패턴과 스레드(Thread) 응용

    KangHo Lee's avatar
    KangHo Lee
    Nov 14, 2024
    [디자인 패턴] 옵저버 패턴과 스레드(Thread) 응용
    Contents
    1. 스레드(Thread)란?2. 소스 코드 예시3. Thread.sleep(10000);4. 람다식(Lambda Expression)
    • 옵저버 패턴에 대한 내용
    [디자인 패턴] 옵저버 패턴 (Observer Pattern) - devleekangho
    디자인패턴
    [디자인 패턴] 옵저버 패턴 (Observer Pattern) - devleekangho
    https://inblog.ai/devleekangho/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4-observer-pattern-34754
    [디자인 패턴] 옵저버 패턴 (Observer Pattern) - devleekangho

    1. 스레드(Thread)란?

    💡
    • 프로그래밍 실행 단위의 가장 작은 단위
    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있습니다.
    • 각 스레드는 독립적으로 실행되지만 같은 프로세스 내의 다른 스레드와 메모리 공간을 공유합니다.

    2. 소스 코드 예시

    // 옵저버 패턴 -> 콜백 public class App { // 1번 스레드 main public static void main(String[] args) { // 1. 객체 생성 init Pub pub = new Pub(); SubListener sub1 = new Sub1(); SubListener sub2 = new Sub2(); // 구독하기 pub.add(sub1); pub.add(sub2); // 2. 마트에 상품 입고하는 2번 스레드 new Thread(() -> { try { // 10초 뒤 상품 입고 Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } // 상품 입고 pub.income(); }).start(); // start: 새로운 스레드 시작 // 3. 마트 3번 스레드 new Thread(() -> { while (true) { if(pub.value == null) { System.out.println("상품 미입고.."); } else { pub.notifyChange(pub.value+ " 입고됨"); break; // 입고되면 멈춤 } try { // 1초마다 상품이 있는지 체크 Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } }).start(); // 총 스레드는 main까지 해서 3개 } // main이 종료되도 프로그램 종료 x -> 스레드 1개라도 살아있으면 유지 }
    • 스레드는 총 3개입니다.
      • main
      • 마트에 상품 입고
      • 상품 입고를 체크하는 마트
    • main 스레드만 있으면 소스 코드를 다 실행 후 프로그램이 종료되지만 스레드가 더 있으면 종료되지 않습니다.

    3. Thread.sleep(10000);

    💡
    현재 실행 중인 스레드를 10초(10000 밀리초) 동안 일시 중단합니다.
    • InterruptedException 처리를 위해 try/catch 문 사용
    • InterruptedException
      • 스레드가 일시 중단 상태일 때 다른 스레드가 이 스레드를 interrupt할 경우 발생하는 예외

    4. 람다식(Lambda Expression)

    💡
    람다식은 자바 8부터 도입된 기능으로, 익명 함수(Anonymous Function)를 간결하게 표현할 수 있는 방법입니다.
    • new Thread() { }
      • Thread 생성자는 매개변수로 Runnable 인터페이스를 구현한 클래스가 필요합니다.
      • Runnable 인터페이스를 구현한 클래스 안에는 run 메서드가 정의되어 있어야 합니다.
      • Thread가 처리하는 소스 코드는 run 메서드 입니다.
    람다식 (() -> { run 메서드 내용 })
    • Runnable 인터페이스를 구현한 클래스의 run 메서드를 정의하는 과정을 생략하고 람다식으로 짧게 표현 가능합니다.
     
    Share article
    Contents
    1. 스레드(Thread)란?2. 소스 코드 예시3. Thread.sleep(10000);4. 람다식(Lambda Expression)

    devleekangho

    RSS·Powered by Inblog