쓰레드란?
쓰레드는 위에서 설명한 프로세스 내에서 실행되는 세부 작업의 단위이다. 여러개의 쓰레드가 모여 하나의 프로세스를 구성하며, 이 하나의 프로세스를 구성하는 여러개의 쓰레드를 멀티쓰레드라고 부른다. 쓰레드는 한번에 하나씩 밖에 동작 할 수 없으며 어떤 쓰레드가 먼저 실행이 될지는 아무도 알 수 없다.
쓰레드의 생성 주기
Thread 생성 -> Runnable -> Running -> Dead
쓰레드의 동기화 (Synchronized)
하나의 메서드 또는 동작을 여러개의 쓰레드가 한번에 사용하게 되면 프로그램이 서버리는 DeadLock 현상이 발생 하는 경우가 있다. 이런 경우를 방지하기 위해 DeadLock이 발생할 수 있는 부분에 synchronized를 이용하여 쓰레드를 동기화 시켜준다.
하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말한다
- 프로세스는 실행을 위해 메모리로 적재된 하나의 프로그램을 말한다
하나의 프로세스 내부에서 스레드가 하나 일 땐 단일 쓰레드(Single Thread) 두개 이상일 땐 다중 쓰레드 (Multi Thread)라고 한다.
JAVA에서 스레드 처리의 우선 순위
- 발생 되는 모든 스레드에는 1~10가지의 우선순위가 정해지며, 우선순위가 낮은 스레드 보다 우선 순위가 높은 스레드가 CPU를 점유 시간이 길어진다
- 우선순위가 같은 스레드 끼리는 경쟁하듯 번갈아 CPu를 점유한다. 그러나 예외적으로 실행 구문이 짧은 스레드 경우에는 먼저 처리 될 수도 있다.
- 다음조건이 발생하면 현재 실행중인 스레드의 처리를 멈추고 다른 스레드를 처리한다
-- 더 높은 우선 순위를 가진 스레드가 실행되었을때 (자연적)
-- 실쟁중인 스레드에 할당된 시간이 완료되었을때 (자연적)
-- run() 메소드가 수행 완료되었을때(자연적)
-- Thread 클래스의 메소드 인 yield,sleep(),join() 등의 메소드가 호출 되었을때 (인위적)
스레드의 상태
- cpu를 점유하고 있지 않다
cpu를 점유하여 실행하기 위해 대기하고 있는 상태이다. 즉 실행 이전의 상태이다.
코딩 상에서 start() 메소드를 호출하면 run() 메소드에 설정된 스레드가 runnable 상태로 진입한다
ready 상태라고도 한다
- run()은 JVM만이 호출 가능하다
CPU를 점유하여 실행하고 있는 상태이다
runnable에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로 run()메소드를 호출하여 스레드
가 runnable 상태로 진입한다
http://blog.naver.com/PostView.nhn?blogId=crom77x&logNo=50046897200
쓰레드 란
쓰레드란? : 쓰레드를 이해하기전에 프로세스의 개념부터 설명하도록 하겠다. 우리가 OS에서 작업을 할 ...
blog.naver.com
- 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며 실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다
- 각 쓰레드별로 자신만의 스택과 레지스터를 가진다
- 한 순간에 하나의 쓰레드만이 실행 가능하다
프로세스와 쓰레드의 차이
- 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다