Java - 비동기 처리(Thread & Runnable)

2025. 3. 4. 06:30·Java & Spring/Java

□ 단점

  • 새로운 스레드를 생성함으로 리소스 낭비가 발생
  • 스레드 생성 비용이 비쌈
  • OS의 스레드 관리 부담이 커질 수 있음

- Thread생성을 통한 비동기 처리

    public static void main(String[] args) {
        final long startTime = System.currentTimeMillis();
        for(int i = 0; i < 5; i++){
            int finalI = i;
            new Thread(
                    () -> {
                        try {
                            log.info("{}번째 작업 {}, 소요시간: {}", finalI, plus(), System.currentTimeMillis() - startTime);
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }
                    }
            ).start();
        }
        log.info("메인 스레드 실행");
    }

    private static double plus() throws InterruptedException {
        double a = Math.round(random() * 10);
        double b = Math.round(random() * 10);
        Thread.sleep(100);
        return a + b;
    }


- 결과

  • thread.start()를 하게되면 실행 요청을 하게되고  OS스케줄러의 제어를 받음
  • for문을 빠르게 빠져나와 메인 스레드가 먼저 실행됨
  • 비동기적으로 각 쓰레드에서 요청되었던 작업이 동시에 동작함

- 일반적인 실행

    public static void main(String[] args) throws InterruptedException {
        final long startTime = System.currentTimeMillis();
        for(int i = 0; i < 5; i++){
            int finalI = i;
            log.info("{}번째 작업 {}, 소요시간: {}", finalI, plus(), System.currentTimeMillis() - startTime);
        }
        log.info("메인 스레드 실행");
    }

    private static double plus() throws InterruptedException {
        double a = Math.round(random() * 10);
        double b = Math.round(random() * 10);
        Thread.sleep(100);
        return a + b;
    }

 

- 결과

  • 순차적으로 작업 진행
  • 앞서 실행된 작업이 완료된 후 다음작업 실행

'Java & Spring > Java' 카테고리의 다른 글

Java - 비동기처리(CompletableFuture)  (0) 2025.03.06
Java - 비동기 처리(ExecutorService / Future)  (0) 2025.03.04
HTTP 요청과 응답에 사용되는 클래스들  (0) 2025.02.06
csv파일으로 더미데이터 생성하기  (2) 2024.11.08
18일차 - Java강의(쓰레드 명령어)  (0) 2024.08.07
'Java & Spring/Java' 카테고리의 다른 글
  • Java - 비동기처리(CompletableFuture)
  • Java - 비동기 처리(ExecutorService / Future)
  • HTTP 요청과 응답에 사용되는 클래스들
  • csv파일으로 더미데이터 생성하기
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 멤버
    데이터 타입
    java
    java 유클리드 호제법
    프로그래머스 java 기초트레이닝
    java super
    java arrays.copyofrnage()
    java기초
    Java 생성자
    java 세수의합
    java 제어자
    Java this
    java two-pointer
    java enhance switch
    java 메서드
    데이터 크기
    java 에라토스테네스의 체
    개발로드맵
    자료구조
    프로그래머스 java 기초 트레이닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
Java - 비동기 처리(Thread & Runnable)
상단으로

티스토리툴바