Frog is cry
Day17 본문
쓰레드(Thread)
프로그램
소스코드로 잘 짜여진 틀(실행되지 않은 상태)
프로세스
실행된 프로그램
운영체제로부터 시스템 자원을 할당받는 작업의 단위
운영체제 대신 JVM에 의해 실행된다.
쓰레드
프로세스의 특정한 수행 경로.
프로그램 처리 경로.
- 단일 쓰레드
직렬적이다.
가장 마지막에 있는 작업이 가장 나중에 수행된다.
따라서 상대적으로 먼저 수행되어야 할 필요가 있는 작업이
나중에 수행되면 비효율적이지만, 정확한 시작과 끝이
있기 때문에 상대적으로 오류가 발생될 확률이 적다.
- 멀티 쓰레드
병렬적이다.
하나의 프로세스를 동시에 처리하는 것 처럼 보이지만
사실은 매우 짧은 단위로 분할해서 차례로 처리한다.
여러개의 처리경로를 가질 수 있게 한다.
한 개의 처리경로를 여러개로 나누어 동시 작업이 가능.
웹 서버가 대표적인 멀티 쓰레드 응용프로그램이다.
JVM에 스케줄링 신청을 하고 등록이 되어야지만
멀티 쓰레드 구현이 가능하다.
- 멀티 쓰레드의 장단점
1. 장점
효율성 증가
처리량 증가
처리비용 감소
2. 단점
복잡하고 설계가 어렵다.
자원의 공유 문제(동기화)
하나의 쓰레드 문제 발생시 모두 문제 발생
교착상태(DeadLock)
교착 상태(DeadLock)
멀티 쓰레드 중 쓰레드 간에 대기 상태가 종료되지 않아서
무한정 대기만 하는 비정상적인 상태
교착상태라고 판단했을 때에는 하나의 쓰레드를 없애주거나 모든 쓰레드를
깨워준다. 하지만 교착상태인지를 판단하는 것이 어렵기 때문에 교착상태를
대비할 수 있도록 설계하는 것이 복잡하고 어렵다.
---------------------------------------------------------------------------------
멀티 쓰레드 구현 방법
Thread 상속
Runnable 지정
***run()메소드가 바로 멀티 쓰레드의 핵심이다!
-----------------------------------------------------------
join()
먼저 처리할 쓰레드 종료 전 다음 로직 수행시 치명적인 오류가 발생할 수 있다.
그러므로 먼저 처리할 쓰레드 객체에 join()을 사용하면 다른 쓰레드는
먼저 할 쓰레드가 종료할 때 까지 대기상태에 돌입한다.
-----------------------------------------------------------
동기화(Synchronized)
특정 자원에 여러 개의 쓰레드가 접근 하게 되면 자원 공유의 문제가
발생할 수 있다. 이를 막아주기 위해서 동기화를 사용하면 해당 자원은
반드시 쓰레드 한 개씩만 접근 할 수 있게 된다.
이 뿐만 아니라 각 쓰레드별 제어를 하기 위해서도 사용한다.
Comments