자바 스레드.

2018. 9. 16. 12:40·JAVA

Thread 쓰레드 : 프로세스(실행중인 프로그램)에서 하나의 실행 흐름을 말한다.  JVM 도 프로세스.


자바는 멀티 쓰레드를 지원하고, 멀티 쓰레드란 하나의 프로그램에서 여러 개의 실행 흐름을 만들고 실행 할 수 있는 것이다.



멀티쓰레드는 왜 사용할까?


 외부와의 연계같이 대기 시간이 발생할 때 기다리는 동안 다른 작업을 처리할 수 있게 하기 위함이다. 처리 속도를 향상시키기 위함.




쓰레드 만드는 법.

1. Runnable 인터페이스를 구현하는 클래스를 만든다.  (Runnable 인터페이스에는 run() 메소드가 유일하다. 이 메소드를 반드시 구현해주어야 한다.) 

(메소드가 하나인 인터페이스 -> 람다 인터페이스)    MyThread implements Runnable {}


2. 인터페이스를 구현한 클래스 객체를 만든다.   MyThread myThread = new MyThread();


3. 2에서 만든 객체를 가진 스레드 객체를 만든다.  Thread th = new Thread( myThread   -- Runnable을 구현한 클래스 객체);


4. 스레드 실행한다.   th.start();




쓰레드 풀.


스레드 개수를 제한할 때 사용. 쓰레드 풀을 3개로 제한하고 많은  Runnable 객체를 4개 이상 만든다면 앞에서 Runnable 객체가 먼저 실행되고 실행이 끝나면 다음 Runnable 객체가 들어가게 된다.



쓰레드 safe


멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.


멀티쓰레드로 동작하는 프로세스에서 자원을 공유하게 될때에는 thread safe 하게 프로그램을 만들어야 한다. 

해결법으로는 synchronized 사용하기





Thread-safe를 지키기 위한 방법


1. Re-entrancy

어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바로 주어져야 한다.


2. Thread-local storage

공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.

이 방식은 동기화 방법과 관련되어 있고, 또한 공유상태를 피할 수 없을 때 사용하는 방식이다.

 

3. Mutual exclusion

공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제한다.


4. Atomic operations

공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.




반응형
'JAVA' 카테고리의 다른 글
  • 추상클래스와 인터페이스에 대하여
  • 미니 WAS 만들기.
  • 자바 제네릭 타입에 대해 알아보자.
  • 클래스 생성에 대한 예제 및 설명
Jadie Blog
Jadie Blog
  • Jadie Blog
    Jadie
    Jadie Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • OOP (7)
      • DDD (1)
      • JAVA (8)
      • Spring (12)
      • Kafka (1)
      • TDD,Test (4)
      • Basic (1)
      • ETC (1)
      • MySQL (0)
      • Javascript (0)
      • Spark (3)
      • Infra (2)
      • Algorithm (0)
      • Network (1)
      • Jobs (0)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 휴튼
  • 공지사항

  • 인기 글

  • 태그

    API문서
    객체지향사실과오해
    우아한스터디
    Spring #ApplicationContext
    Kafka
    Resilience4jFeign
    MASTER
    캡슐화
    Test
    OOP
    글또
    java
    추상클래스 #인터페이스
    entitymanager
    JAVA #IO
    Transactional Outbox
    메시징시스템
    localdatetime
    테스트
    객체지향
    Spring
    jpa
    JPQL
    springboot
    MSA
    HTTP #HTTPS
    OAuth2 #Spring
    의존역전원칙
    slave
    routingdatasource
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jadie Blog
자바 스레드.
상단으로

티스토리툴바