Hello, Android!

스레드 본문

Kotlin

스레드

lwndnjs93 2020. 8. 29. 21:03

어떠한 작업을 하기 위해서 컴퓨터는 프로세스를 만들어 작업을 수행한다

과거에는 프로그램에서 단일 프로세스만으로 충분히 작업이 가능하였지만

한 프로그램 내에서 여러 작업을 동시에 수행해야 하는 경우 여러개의 프로세스를 만들었다

새로운 프로세스를 생성하는것은 비용적인 측면에서도 효율이 좋지 않고

프로세스들 사이에 정보 교환이 어려웠다

이러한 문제를 해결하기 위해 프로세스보다 작은 단위인 스레드가 나왔다

하나의 프로세스 내에서 여러 스레드를 만들어 작업을 수행할수 있으며

메모리를 공유하기때문에 정보 교환도 손쉽게 가능하며

스레드의 생성과 삭제도 적은 비용으로 가능하게 되었다

 

코틀린에서도 스레드 사용이 가능하며

당연히 자바의 스레드 클래스를 코틀린에서도 사용이 가능하다

main함수에서 생성한 첫번째 스레드는 Thread클래스를 상속받은 클래스에서

run함수를 오버라이딩하여 사용하였다

두번째 스레드는 runnable 인터페이스를 구현한 클래스를 사용하였다

 

첫번째 스레드 처럼 상속을 받는 경우, Thread클래스를 상속받았기 때문에

다른 클래스를 상속받을수 없는 문제가 생기며 권장하지 않는다

두번째 스레드는 Runnable 인터페이스를 구체화 하였기때문에 다른 클래스의 상속이 가능하다

 

하지만 이는 익명 객체를 사용하면 더 손쉽게 사용이 가능하며

익명 객체를 사용하여 run 함수를 오바리이딩하여 사용하였다

 

또 다른 방법으로는 코틀린에서 제공하는 thread()함수를 사용하는 것이다

thread함수의 매개변수를 살펴보면

 

start - 스레드를 즉시 실행한다

isDaemon - 백그라운드 실행여부

contextClassLoader - 클래스 및 리소스를 로드하는데 사용할 클래스 로더

name - 스레드의 이름 설정

priority - 스레드의 우선순위 설정 (1: 낮음 ~ 5:보통 ~ 10: 높음)

 

thread함수를 사용하면 스레드의 우선순위, 백그라운드, 이름 등 스레드의 여러 옵션을 설정할수 있으며

매개변수를 할당하지 않으면 기본값이 들어가게 된다

 

'Kotlin' 카테고리의 다른 글

runBlocking  (0) 2020.09.06
코루틴 launch, async  (0) 2020.09.05
I/O 입출력 (입력)  (0) 2020.08.16
I/O 입출력 (출력)  (0) 2020.08.15
DSL  (0) 2020.08.09