스레드(Thread)
스레드는 경량 프로세스(Light-Weight)라고도 하며 하나의 프로세스 안에서 여러개의 흐름을 말합니다.
그 여러개의 흐름이 여러개의 실 가닥 같다고 하여 스레드라고 불리게 되었죠.
프로세스란 실행중인 프로그램이고 운영체제에게 메모리를 할당받아 실행합니다.
윈도우의 작업 관리자를 보면 현재 kakaoTalk 라는 프로그램이 실행중입니다.
이것을 프로세스라고 하며 메모리를 78,124KB 할당받아 실행중인것을 알 수 있습니다.
그렇다면 왜 스레드가 필요한 것일까요??
예를 들어 메이플 스토리라는 게임이 있습니다.
이 게임은 사냥도 하면서 동시에 배경음악을 실행시키고 또 채팅까지 할 수 있습니다.
만약 스레드 없이 어느 한 시점에 한가지 흐름으로 즉 사냥만 또는 배경음악만 또는 채팅만 한다면 어떻게 될까요?
사용자는 그 게임을 하지 않겠죠.
그렇다면 방법은 메이플 사냥 프로그램, 메이플 배경음악 프로그램, 메이플 채팅 프로그램 세가지 프로그램을 개발 한 뒤
세 개의 프로세스를 동시에 실행(Multi Tasking)시켜야 할 것입니다.
그럼 개발도 힘들것이고 시스템 자원낭비도 엄청나겠죠?
그래서 자바에는 하나의 프로세스 안에서 동시에 여러개의 흐름을 가질 수 있게 멀티스레딩(Multi Threading)을 지원하는 것입니다.
스레드의 장단점
스레드를 이용하면 CPU, 메모리 같은 자원의 효율이 향상되고 개발이 용이할것입니다.
하지만 동시에 여러가지 흐름으로 인해 그만큼 생각해야 할 것도 많습니다.
흐름이 하나일 때에는 그 흐름에 대한 예외처리만 해주면 되지만 서로 연관된 기능을 하는 스레드들 중 하나에서 예외가 발생하면
다른 스레드까지 영향이 갈 수 있으므로 예외 처리에 더욱 신중해야 합니다.
또 여러 스레드에서 동시에 한 자원에 접근하여 발생하는 교착상태(deadlock) 같은 문제에도 주의하여 사용해야 합니다.
스레드의 개념에 대해서 알아봤으니 스레드 사용법은 다음 글에서 알아 보도록 하겠습니다.
관련글
[전산학개론] - 프로그램, 프로세스, 프로세서 차이 [1]
[전산학개론] - 프로그램, 프로세스, 프로세서 차이 [2]
'자바[Java]' 카테고리의 다른 글
[JAVA] 환경변수 설정하는 이유 및 환경변수란 무엇인가 (0) | 2017.10.30 |
---|---|
[Java] URLEncoder URLDecoder 클래스 (0) | 2017.10.30 |
[Java] Type Safe란? (0) | 2017.10.30 |
[Java]스레드(Thread) - [3] 스레드 생성과 실행 Runnable 구현 (0) | 2017.10.30 |
[Java]스레드(Thread) - [2] 스레드 생성과 실행 (0) | 2017.10.30 |