코드와이
Thread란? 본문
Thread
- 개념
- 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말하며, 세부적으로는 운영체제에 의해 관리되는 하나의 작업 혹은 태스크를 의미한다.
- JVM에 의해 하나의 프로세스가 발생하고 main() 안의 실행문들이 하나의 스레드이다.
- main() 이외의 또 다른 스레드를 만들기 위해선 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현한다.
- 다중 스레드 작업 시에는 각 스레드끼리 정보를 주고 받을 수 있어 처리 과정의 오류를 줄일 수 있다.
- 프로세스끼리는 정보를 주고 받을 수 없다.
멀티스레딩
- 개념
- 여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법
- 장점
- 메모리 공유로 인한 시스템 자원 소모 감소
- 동시에 두 가지 이상의 활동을 하는 것이 가능
- 단점
- 서로 자원을 소모하다가 충돌이 일어날 수 있음
- 코딩이 난해해져 버그 발생확률 향상
스레드 생성주기
- Runnable( = Ready)
- 스레드가 실행되기 위한 준비 단계
- CPU가 점유하고 있지 않으며 대기하고 있는 상태로 코딩 상에서 start() 메소드를 호출하면 run() 메소드에 설정된 스레드가 Runnable상태로 진입한다.
- Running
- 스케줄러에 의해 선택된 스레드가 실행되는 단계
- CPU를 점유하여 실행하고 있는 상태이며 run() 메서드는 JVM만이 호출 가능하다.
- Runnable에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로 run() 메소드를 호출시켜 스레드가 Running상태로 진입한다.
- Dead( = Done)
- Running 상태에서 스레드가 모두 실행되고 난 이후의 상태
- Blocked
- 스레드가 작업을 완수하지 못하고 잠시 작업을 멈추는 단계
- CPU 점유권을 상실한 상태로 후에 특정 메서드를 실행시켜 Runnable 상태로 전환된다.
- wait() 메소드에 의해 Blocked 상태로 넘어가고 이 스레드는 notify() 메소드가 호출되면 RUnnable 상태가 된다. sleep() 메소드에 의해 Blocked 상태의 시간을 지정할 수 있다.
Reference
'기타' 카테고리의 다른 글
데이터베이스에 관하여 (0) | 2021.11.30 |
---|---|
디자인 패턴의 개념과 종류 (0) | 2021.11.29 |
Maven & Gradle (0) | 2021.11.29 |
Web Server vs WAS (0) | 2021.11.29 |
형상관리 툴(CVS, SVN, Git) (0) | 2021.11.29 |