본문 바로가기

옛글/안드로이드 프로그래밍

안드로이드 스레드(Thread) 개념

반응형
1) Thread 클래스를 상속
2) Runnable 인터페이스를 구현한 클래스를 구현하고 Thread 의 인스턴스를 연결

 


[Thread]


Thread를 상속할때는 새로운 스레드가 실행할 코드를 run() 메소드에 오버라이드 시킨다
Runnable 객체를 매개변수로 받아 객체를 생성할수 있다.


Thread()
Thread(Runnable)
Thread(Runnable, String threadName)
Thread(ThreadGroup, Runnable, String threadName)


start() :: 메소드는 run() 메소드를 호출한다.
sleep(long milisecs) :: 지정된 초만큼 멈춘다.
sleep(long milisecs, int nanosecs) :: long + int 시간동안 멈춘다.
yield() :: 다른 스레드들에게 실행할 기회를 허용해준다.
getName() :: 스레드 이름 반환
Thread.activeCount() :: 현재 실행중인 스레드 갯수
Thread.enumerate() :: 실행중인 스레드들로 배열을 채운다.
Thread.currentThread() :: 현재 스레드 반환
Thread.dumpStack() :: 현재 메소드와 콘솔 스트림을 호출하는 모든 메소드 출력


Thread 클래스를 상속 받는 방법.(java.lang 에 포함되어 잇음)
      class A extends Thread {
        public void run() {  //Thread를 실행하라고 하면.. 이 메소드 부터 실행이 된다.

        }
      }        //A라는 클래스가 하나의 Thread가 된다.
 
      .
      .
      .
      A ap = new A()
      // ap.run();      //하면 단순히 메소드의 실행만 될 뿐이다. 그래서.. 호출하지 않는다.
      ap.start();      //하면 새로운 작업 흐름을 만들고 그것을 실행 시키라고 알려 주는것이다.
                        //start()는 Thread 객체에 포함된 메소드 이다.

 

 

[Runnable]


자바에서는 다중상속을 지원하지 않기 때문에 확장 클래스에서 쓰레드로 실행하길 원한다면
Runnable 인터페이스를 구현하면 된다.
Thread의 생성자는 Runnable 을 매개변수로 받기도 하기 때문이다.
이렇게 결합된 스레드가 실행될때는 Runnable 객체의 Run메소드가 실행된다.


Runnable 인터페이스를 상속 받는 방법.
      class A implements Runnable {
        public void run() {    //Runnable 에는 이것 하나의 메소드 밖에 없다.


        }
      }

      A ap = new A();
      Thread tt = new Thread(ap);        // 바로 실행이 안되므로 Thread에 담아서 실행 시켜야 한다.
      tt.start();

 

 


[Daemon Thread]


하나이상의 스레드를 가지고 있을때 그중 하나가 종료 되었음을 표현할수 있게 도와 준다.
setDaemon(boolean) 메소드는 스레드가 데몬인지 아닌지를 결정할 수 있게 한다.
이 메소드는 쓰레드 시작전 호출되어야하기 때문에 시작된 스레드는 데몬으로 바뀔수 없다.
데몬 스레드는 JVM 종료에 의해 종료될때 스스로의 스레드를 정리 할 수 없다는것을 주의하자






위의 설명과 같이 스레드란 process와 같은 개념으로 사용이 되기도 하며, 위와 같은 방법으로 사용이 됩니다.
반응형