250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • SpringMVC
  • swift
  • Front-end
  • ADsP
  • 자바
  • data
  • 문제풀이
  • 브루트포스
  • 개발
  • Python
  • 선형대수
  • JPA
  • 구현
  • BOJ
  • BFS
  • 개발자
  • 백준
  • AI
  • ios
  • 머신러닝
  • uArm
  • DP
  • 프로그래머스
  • certificate
  • 코딩테스트
  • 카카오
  • java
  • 알고리즘
  • JAVA8
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

자바 쓰레드의 기초
Language/Java

자바 쓰레드의 기초

2022. 3. 3. 00:10
728x90
728x90

Thread 기초

  • 쓰레드를 만드는 방법

    Thread thread = new Thread(()->{
              System.out.println("Hello Thread");
    });

    쓰레드를 만드는 방법은 new Thread()를 할 때 Runnable 함수형 인터페이스를 넣어줌으로써 만들어줄 수 있다.

  • 쓰레드 start

    thread.start();

    쓰레드를 생성하여 실행하기 위해서는 start()를 사용해주면 된다.

  • 쓰레드 sleep

    thread.sleep(1000);

    쓰레드에서 잠시 리소스를 빼앗기 위해서 sleep을 할 수 있다. 그렇게 되면 쓰레드가 하던 일을 잠시 멈추고 리소스를 다른 쓰레드에서 넘겨주게 된다.

  • 쓰레드 interrupt

          Thread thread = new Thread(()->{
              while (true){
                  try {
                      Thread.sleep(1000L);
                      System.out.println("쓰레드 동작중!");
                  } catch (InterruptedException e) {
                      System.out.println("끝!");
                      return;
                  }
              }
          });
          thread.start();
          Thread.sleep(3000L);
          thread.interrupt();
      }

    자고있는 쓰레드에 인터럽트를 걸어주면 깨어나고 interrupt exception을 처리하게 된다.
    위 예시를 보면 생성된 쓰레드가 동작하면서 계속 "쓰레드 동작중!"을 프린트해주고 있으며 interrupt가 들어온 순간 쓰레드를 종료시키는 것을 볼 수 있다.

  • 쓰레드 join

    Thread thread = new Thread(() -> {
              Thread thread = new Thread(() -> {
              try {
                  Thread.sleep(3000L);
              } catch (InterruptedException e) {
                  return;
              }
              System.out.println("쓰레드 동작완료");
          });
          thread.start();
    
          System.out.println("Main!");
          thread.join();
          System.out.println("finish thread");
  • join()을 사용하면 해당 쓰레드가 종료될 때 까지 기다린다. 아래의 finish thread가 join()이 있기 때문에 쓰레드가 종료된 이후에 실행이 된다.

  • 만약 join()이 없다면 출력의 순서가 'Main! -> finish thread -> 쓰레드 동작완료' 로 동작할 수 있다.

  • 하지만 join()이 있기 때문에 'finish thread'와 '쓰레드 동작완료'의 순서가 항상 '쓰레드 동작완료 -> finish thread'가 된다.

728x90
728x90
저작자표시 비영리

'Language > Java' 카테고리의 다른 글

자바 쓰레드 Callable과 Future  (0) 2022.03.03
자바 Excuter로 쓰레드 처리하기  (0) 2022.03.03
Java8의 시간 API 알아보기(LocalDateTime, Instant 등)  (0) 2022.03.01
Optional을 알아보자!  (0) 2022.02.27
Java8의 Stream을 알아보자!  (0) 2022.02.22
    'Language/Java' 카테고리의 다른 글
    • 자바 쓰레드 Callable과 Future
    • 자바 Excuter로 쓰레드 처리하기
    • Java8의 시간 API 알아보기(LocalDateTime, Instant 등)
    • Optional을 알아보자!
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바