BackEnd 학습/Java

Java(자바) - Thread(스레드)

잉아당 2024. 1. 25. 17:37
728x90

멀티 스레드 개념

  • 프로세스(process)
    • 실행 중인 하나의 애플리케이션
    • 하나의 애플리케이션은 다중 프로세스 생성 가능
    ex) chrome 2개
    • 멀티 프로세스는 서로 독립적이며 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않음
  • 멀티 태스킹(multi tasking)
    • 두 가지 이상의 작업을 동시에 처리
  • 스레드(thread)
    • 하나의 코드 실행 흐름
    • 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라 볼 수 있음
    • 멀티 스레드는 하나의 프로세스 내부에서 생성되기 때문에 다른 스레드에 영향을 미칠 수 있음
  • 모든 자바 애플리케이션은 메인스레드가 main() 메서드 실행으로 시작
  • 싱글 스레드는 메인 스레드가 종료되면 프로세스도 종료
  • 멀티 스레드는 실행 중인 스레드가 있으면 프로세스가 종료되지 않음

작업 스레드 생성과 실행

  • 스레드 생성 방법
    • Thread 클래스로 부터 직접 생성
      • Runnable 인터페이스를 매개값으로 갖는 Thread 생성자를 이용해 생성
        • Runnable 인터페이스의 run() 메서드를 Override 해서 작업 구현
        • start() 메서드를 통해 작업 실행
    • Thread 자식 클래스로 생성
      • Thread 클래스를 상속 받아 run() 메서드를 Override 해서 작업 구현
        • start() 메서드를 통해 작업 실행

스레드 상태

  1. 스레드 객체 생성(NEW)
  2. start()
  3. 실행 대기 상태(RUNNABLE)
  4. CPU 스케쥴링에 따라 실행대기 혹은 실행
  5. 실행 모두 수행 후 종료(TERMINATED)
  • sleep : 일정시간 동안 일시정지
  • join : 스레드가 종료될 때까지 일시정지
  • yield : 다른 스레드에게 양보
  • synchronized(동기화) 메소드와 블록을 사용하게 되면 한 스레드만 사용이 가능
  • synchronized 메소드 기준으로 notify, wait 을 사용하면 번갈아 가면서 처리할 수 있음
  • interrupt 메소드를 사용하면 일시 정지일 때 정상 종료 시킬 수 있음

데몬 쓰레드

  • 주 스레드의 작업을 돕는 보조적인 역할을 수행
  • 주 스레드 종료시 자동으로 종료
  • setDaemon 으로 지정

스레드풀

  • 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 스레드가 하나씩 맡아 처리하는 방식
  • newCachedThreadPool은 작업이 60초동안 없을경우 스레드를 풀에서 제거
  • newFixedThreadPoo은 생성된 스레드를 제거하지 않음
  • shutdown은 큐작업을 모두 처리후 종료
  • shutdownNow는 즉시 종료 후 남은 작업을 List로 반환
  • 리턴값이 없는 Runnable 객체와 리턴값이 있는 Callable 객체로 작업 생성 후 요청

'BackEnd 학습 > Java' 카테고리의 다른 글

Java(자바) - 스트림  (0) 2024.01.31
Java(자바) - 컬렉션 프레임워크  (0) 2024.01.29
Java(자바) - 제너릭  (0) 2024.01.25