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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바