무언가를 백그라운드로 돌려놓고 다른 여러가지 일을 하는 것
외부 Thread 가 없이 Main Thread 만으로만 구현하게 된다면, 어떠한 버튼을 눌렀을 때 Main Thread 내부적으로 10초 이상이 걸리는 작업을 할 때 사용자는 그 일이 끝날 때까지 멈춰있는 화면만 보고 있어야 한다.
그렇기 때문에 개발자는 오래 걸리는 작업들을 외부 Thread를 통해 백그라운드 처리하지 않으면 ANR이 나타난다.
JVM에서는 하나의 프로세스에서 여러개의 스레드를 가질 수 있게 허
따라서 메인 스레드 외에 추가로 스레드를 만들 수 있는데, 이렇게해서 만들어진 추가 스레드를 워커 스레드라 함.
메인 스레드와 워커 스레드가 둘 다 존재하여 스레드가 2개 이상인 상태를 멀티 스레드
안드로이드의 모든 UI 작업을 다 메인 스레드에서 하는걸 강제화 하고 있다. 따라서 UI 변경을 워커 스레드에서 시도한다면 에러가 발생할 것이다.
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.start()
a.join()
b.start()