(Android/안드로이드) Thread 사용 시 꼭 알아야 할 유용한 메서드 정리

✨ 개요

안드로이드 개발을 하면 다음과 같은 로그를 보게된다.

main
DefaultDispatcher-worker-1
pool-3-thread-1
OkHttp Dispatcher

이런 로그의 출처는 대부분 Thread.currentThread()다. 스레드 이름을 정확히 이해하고 활용하면 UI 스레드 문제, 비동기 버그, 크래시 원인을 훨씬 빠르게 추적할 수 있다.


1. 요약


2. Thread.currentThread()

val thread = Thread.currentThread()

즉, Handler(Looper.getMainLooper())는:

“메인 스레드(=UI 스레드)의 이벤트 큐에 작업을 넣어서, UI 스레드에서 실행되게 하겠다”


3. Thread.currentThread().name

Log.d("THREAD", Thread.currentThread().name)
스레드 이름 의미
main 메인(UI) 스레드
DefaultDispatcher-worker-X Coroutine Default Dispatcher
pool-1-thread-1 ExecutorService
OkHttp Dispatcher OkHttp 네트워크 스레드
Binder:X_Y IPC Binder 스레드

4. 현재 코드가 메인(UI) 스레드인지 확인하기

val isMainThread = Thread.currentThread() == Looper.getMainLooper().thread

val isMainLooper = Looper.myLooper() == Looper.getMainLooper()

fun assertMainThread() {
    check(Looper.myLooper() == Looper.getMainLooper()) {
        "UI thread에서 실행되어야 합니다. current=${Thread.currentThread().name}"
    }
}

5. Thread.currentThread().id - Thread 고유 ID

val id = Thread.currentThread().id

6. Thread.currentThread().state - 스레드 상태 확인

val state = Thread.currentThread().state
상태 의미
NEW 생성만 되고 시작 안 됨
RUNNABLE 실행 중 또는 실행 가능
BLOCKED lock 대기 중
WAITING 무기한 대기
TIMED_WAITING 시간 제한 대기
TERMINATED 종료

7. Thread.currentThread().priority - 우선순위

val priority = Thread.currentThread().priority

8. Thread.sleep() - 사용 주의


9. 정리

메서드 용도
Thread.currentThread() 현재 스레드 객체
.name 스레드 이름 로그 (가장 중요)
.id 고유 식별자
.state 상태 디버깅
.priority 참고용
Looper.myLooper() UI 스레드 체크


Related Posts