안드로이드 스튜디오/Java

안드로이드 Thread (1)

류창 2021. 11. 6. 15:46
반응형

 

쓰레드 이전에 멀티 태스킹에 대해 알아야한다.

 

멀티태스킹이란?

 

하나의 응용프로그램이 여러작업을 동시에 처리한다.

EX) 파일을 다운로드하면서 웹서핑,노래듣기,동영상보기

 

 

멀티태스킹엔 멀티프로세스, 멀티 쓰레드가 존재한다.

 

멀티프로세스: 프로세스와 프로세스 간의 상호작용+ 동시적으로 프로세스 처리

 

멀티스레드: 하나의 프로세스 안에서 쓰레드간의 상호작용 + 동시적으로 쓰레드 처리

 

 

 

 

이번 포스팅은 멀티 쓰레드에대해 다뤄볼것이다.

 

 

쓰레드를 하나 생성하려면,  두가지 방법이있다.

 

  Java.lang.Thread 클래스를 이용하는 경우
• Java.lang.Runnable 인터페이스를 이용하는 경우

 

 

다양한 기능을 안쓰고, 단일 쓰레드를 생성하려면, Thread 클래스를 이용하지만,

 

다양한 참조를 쓰려면 Runnable 인터페이스를 이용해야한다.

 

자바가 다중상속을 막아버렷기 때문이다..

 

 

 

이번에는 쓰레드를 사용해보기위해서니, Thread클래스를 이용해보겠다.

 

쓰레드를 테스트하기위한 어플리케이션을 만들어보자

 

 

 

Thread클래스를 extend 하여 스레드기능을 해주는 ComplexThread를 만들었다.

 

Thread를생성해서 실행할 로직은 run메소드를 오버라이딩해서 작성하면된다.

 

내부 로직은, 제대로 쓰레드를 생성했는지 확인하기위한 로그와,

 

메인 UI를 조작을 해보았다. -> 메인에있는 TextView 조작

 

 

 

버튼을 누르면 내가만든 쓰레드 클래스를 실행하도록 짯다.

쓰레드객체를 생성하고 , start로 시작한다.

 

 

 

액티비티를 생성하면, 이렇게나온다.

 

메인쓰레드 ID는 4585

우리가 만든 쓰레드 ID는 5204

 

성공적으로 쓰레드를 생성하였다.

 

그런데 이런 오류가뜬다.

 

이 오류가 뜨는이유는, 내가만든 쓰레드가 메인UI를  조작하려는 접근이 있어서 오류가뜨는것이다.

 

 

이 사태를 막기위해선,  자작쓰레드가 메인쓰레드에게 값만 전달하고,

조작은 메인쓰레드에서 하게 코딩을해야지 문제가없다.

 

 

Thread 간 통신 방법
• Handler
• AsyncTask
• Deprecated in API level 30 (version R)
• Customized Handler
• RxJava (자바)
• Coroutines (코틀린)

 

 

쓰레드간 메시지를 전달하고 받는걸 지원해주는 여러가지 기능이있다.

 

그중에 제일 기본적인 Handler에 대해서 다뤄볼것이다.

 

Handler에대한 내용은 다음 포스팅에 다뤄볼 예정입니다.

반응형