간단한 thread

쿵ㅇ양·2023년 10월 25일
0

Android

목록 보기
25/30

thread

무언가를 백그라운드로 돌려놓고 다른 여러가지 일을 하는 것

필요성

외부 Thread 가 없이 Main Thread 만으로만 구현하게 된다면, 어떠한 버튼을 눌렀을 때 Main Thread 내부적으로 10초 이상이 걸리는 작업을 할 때 사용자는 그 일이 끝날 때까지 멈춰있는 화면만 보고 있어야 한다.
그렇기 때문에 개발자는 오래 걸리는 작업들을 외부 Thread를 통해 백그라운드 처리하지 않으면 ANR이 나타난다.

워커 스레드 (WorkerThread)

JVM에서는 하나의 프로세스에서 여러개의 스레드를 가질 수 있게 허
따라서 메인 스레드 외에 추가로 스레드를 만들 수 있는데, 이렇게해서 만들어진 추가 스레드를 워커 스레드라 함.
메인 스레드와 워커 스레드가 둘 다 존재하여 스레드가 2개 이상인 상태를 멀티 스레드

메인 스레드 (MainThread)

안드로이드의 모든 UI 작업을 다 메인 스레드에서 하는걸 강제화 하고 있다. 따라서 UI 변경을 워커 스레드에서 시도한다면 에러가 발생할 것이다.

간단한 구현법

MainActivity에서

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val a=A()
        val b=B()

        a.start()
        b.start()
    }

    class A : Thread(){
        override fun run() {
            super.run()
            for (i in 1..1000){
                Log.d("test", "first : $i")
            }
        }
    }

    class B : Thread(){
        override fun run() {
            super.run()
            for (i in 1000 downTo 1){
                Log.d("test", "second : $i")
            }
        }
    }
}

만약 a가 다 실행되고 b가 실행되길 원한다면 : a.join() 추가

a.start()
a.join()
b.start()
profile
개발을 공부하고 있는 대학생

0개의 댓글

관련 채용 정보