Thread

Android/Android 기초 / / 2022. 4. 19. 00:44

Thread

  • 프로그램내에서 실행되는 실행 단위
  • 🎯 쓰레드를 여러개 만들어 비동기적 처리가 가능하게 한다.

🎯 Thread의 문제점

  1. 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받음
  2. 스레드를 많이 생성하면, Context Switching이 많이 일어나, 성능 저하
  3. 동시에 접근을 하게 되면, 연산이 늦게 끝난 스레드의 결과값으로 덮어씌워짐 (데이터 불일치)

🎯 해결방법

  • 1번과 2번은 Coroutine을 통해 해결할 수 있다.
    • Coroutine은 Thread를 더 잘게 나누어 동시성을 가지게 되므로
    • 하나의 코루틴에서 오류가 발생하더라도 해당 코루틴 작업만 처리가 되며 다른 스레드에는 영향을 끼치지 않는다.
  • 3번은 동기화(Synchronization)을 활용한다.
    • Mutex / Semaphore 등 활용

🎯 Thread 종료

  • Thread.destory()
    • Thread를 파괴하기 위한 함수
    • 이 함수는 리소스를 정리하지 못해 데드락이 발생할 수 있음
    • 따라서, 이는 구현이 되어 있지 않음
  • Thread.stop()
    • Java의 모든 객체들은 Monitor를 가지고 있으며 하나의 객체를 여러 스레드에서 접근할 수 없도록 잠금 기능을 사용하여 중복 접근을 막는 역할을 수행
    • 그런데 Thread.stop 함수를 사용해서 쓰레드가 멈추면 이 Monitor 잠금 기능이 풀림
    • 여러 쓰레드에서 접근이 가능, 일관성이 깨짐
  • Thread.interrupt()
    • InterruptedException을 발생시켜 중지 시킴
    • interrupt 플래그 값이 true로 설정
    • 스레드가 일시 정지상태가 되었을 때 중지됨
  • 정상종료
    • running중인 작업을 정상적으로 종료시키는 것이 가장 안정적이다.
    • while(flag)를 세워 특정 상황에서 flag를 false로 비활성화 시켜 정상적으로 종료시키는 것이 안전함

'Android > Android 기초' 카테고리의 다른 글

Splash  (0) 2022.04.19
Handler & Looper  (0) 2022.04.19
DrawerLayout  (0) 2022.04.19
TabLayout  (0) 2022.04.18
BottomNavigation  (0) 2022.04.18
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기