Java 56. Thread
Thread
- 메모리를 할당받아 실행 중인 프로그램을 프로세스라고 한다.
- 프로세스 내의 명령어 블록으로 시작점과 종료점을 가진다.
- 실행중에 멈출 수 있으며 동시에 수행 가능하다.
- 어떠한 프로그램내에서 특히 프로세스 내에서 실행되는 흐름의 단위.
멀티스레딩
여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법.
장점
- 메모리 공유로 인한 시스템 자원 소모가 줄어든다.
- 동시에 두가지 이상의 활동을 하는 것이 가능해진다.
단점 - 서로 자원을 소모하다가 충돌이 일어날 가능성이 존재
- 코딩이 난해해져 버그생성확률이 높아진다.
스레드의 생명주기
Runnable(준비단계)
스레드가 실행되기 위한 준비단계이다. CPU를 점유하고 있지 않으며, 실행을 하기 위해 대기하고 있는 상태이다. 코딩 상에서 start()메소드를 호출하면 run()메소드에 설정된 스레드가 Runnable상태로 진입한다.Running(실행상태)
CPU를 점유하여 실행하고 있는 상태이며, run()메소드는 JVM만이 호출가능하다. Runnable에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로 run()메소드를 호출하여 스레드가 Running 상태로 진입한다.Dead(종료상태)
Runnig상태에서 스레드가 모두 실행되고 난 후 완료 상태입니다. “Done”상태라고도 한다.Blocked(지연상태)
CPU점유권을 상실한 상태이다. 후에 특정 메소드를 실행시켜 Runable로 전환한다.
wait() 메소드에 의해 Blocked 상태가 된 스레드는 nofify() 메소드가 호출되면 Runnable 상태로 간다. sleep(시간) 메소드에 의해 Blocked상태가 된 스레드는 지정된 시간이 지나면 Runnable상태로 간다.
쓰레드 구현과 실행
쓰레드를 구현하는 방법은 두가지가 있다.
- Thread클래스를 상속
- Runnable인터페이스를 구현
Runnable을 사용하는 것이 낫다.
그 이유는 Thread클래스를 상속받으면 다른 클래스를 상속 받지 못하기 때문이다
Runnable을 구현하는 방법은 재사용성이 높고 코드의 일관성을 유지 할 수 있다는 장점이 있기 때문에 보다 객체지향적인 방법이라 할 수 있다.