[JAVA] 쓰레드(Thread)의 기초 및 이론, 활용, 응용, 예제 :: 소림사의 홍반장!

관련글

 

 

쓰레드(Thread)란?

한 프로그램이 하나 이상의 독립적인 서브태스크(subtask)로 분리되어 실행될 때 각 서브 태스크를 쓰레드라 한다.

각 쓰레드는 별개로 실행하면서 CPU를 공동으로 사용한다. 이렇게 하나의 프로세스에서는 동시에 여러 쓰레드가 실행될 수 있다.

 

 

 

쓰레드(Thread)의 Life-Cycle

 

 

쓰레드(Thread)의 생성 방법

1. Thread 클래스로부터 상속받기

 

2. Runnable 인터페이스로 Thread 만들기

 


쓰레드(Thread) 관련 용어 설명

 

join : 쓰레드가 죽을때까지 기다린다.

 

priority : 우선순위

실행 전에 setPriority로 우선순위를 부여한다. ( 1 ~ 10 )

 

deadlock : 계속 응답대기상태 (화장실에 들어가서 문잠그고 죽어버린것!!!! 비유하자면..ㅎ)

Interrupt : 응답이 없거나 wait 상태에 있는 경우 빠져나오게 한다.

 

 

wait : 대기

wait 상태가 되면 현재 존재하는 곳의 synchronized 만 유효하고 다른곳의 동기는 풀린다
wait 는 notify 로 깨운다

 

notify : 자고있는 쓰레드 중 하나를 무작위로 깨운다. 지정하여 깨우는것 안됨


notifyAll : 자고있는 모든 쓰레드를 깨운다.

synchronized : 동기화

한번에 하나의 쓰레드만 수행할 수 있도록 한다.

객체에 대해서 모니터를 가지게 되고 락을 걸게 된다

 

Daemon Thread : 메인 쓰레드가 끝날때 운명을 같이 한다. (강제종료)
                        원래는 쓰레드가 끝날때까지 메인 쓰레드는 종료되지 않는다.

 

 

 

* 멀티쓰레딩 시 프로그램의 실행 속도에 문제가 있다면 다음 사항을 확인해야 한다.

1. sleep(), yield(), wait() 메소드를 충분한 만큼 사용하고 있는가?

2. sleep() 메소드의 인자로 주는 대기 시간을 충분히 길게 지정하였는가?

3. 너무 많은 쓰레드를 실행시키는 것은 아닌가?

 

 

 

 

 

 

다른 카테고리의 글 목록

Dev. 자바/API 및 이론 카테고리의 포스트를 톺아봅니다