앱 만들기/안드로이드 study

Thread 인터페이스로 구현하기

나도처음이야 2020. 5. 8.
반응형

지난 시간에 이어 Thread 를 인터페이스로 구현해보자.

 

 

Thread 작성 하는 법. JAVA

두 개의 While() 문이 동작하는 구문이 있다면, 뒤에 따라온 While() 문은 동작하지 않을 것이다. 앱이나 프로그램을 만들 때, 두 개의 작업을 동시에 해야 하는 경우가 많다. 채팅하면서 음악도 듣고 영화도 보거..

soo0100.tistory.com

1. Runnable 인터페이스를 구현하고 run() 함수를 오버 라이딩 한다.

class Test2 implements Runnable{

 

      @Override

      public void run() {

            // TODO Auto-generated method stub

            while(true) {

                  try {

                       

                        Thread.sleep(1000);

                  }catch(Exception e) {}

                  System.out.println("+++");

            }

      }

     

}

 

2. main() 함수에서 Test2 클래스를 생성하고,

   Thread 클래스의 인자 값으로 넣어준 다음 start() 함수를 호출한다.

       public static void main(String[] args) {

            // TODO Auto-generated method stub

 

            Test2 t2 = new Test2();

            Thread t = new Thread(t2);

            t.start();

           

            while(true) {

                  try {

                       

                        Thread.sleep(1000);

                  }catch(Exception e) {}

                  System.out.println("HA HA HA !!!");

            }

      }

 

Thread 클래스를 직접 상속하는 방법과는 조금 틀리지만, 이 또한 유용한 방식이다.

실행 결과는 하기와 같이 나온다.

 

[ 실행 결과 ]

HA HA HA !!!

+++

+++

HA HA HA !!!

+++

HA HA HA !!!

+++

HA HA HA !!!

+++

HA HA HA !!!

HA HA HA !!!

+++

HA HA HA !!!

+++

HA HA HA !!!

+++

HA HA HA !!!

+++

+++

HA HA HA !!!

+++

HA HA HA !!!

 

한 발자국 더 나아가 3개의 Thread 를 동시에 구현해보자.

main , Test1, Test2 이다.

public class ThreadTest {

 

      public static void main(String[] args) {

            // TODO Auto-generated method stub

 

            Test t1 = new Test();

            t1.start();

     

            Test2 t2 = new Test2();

            Thread t = new Thread(t2);

            t.start();

           

            while(true) {

                  try {

                       

                        Thread.sleep(1000);

                  }catch(Exception e) {}

                  System.out.println("HA HA HA !!!");

            }

      }

 

}

 

class Test extends Thread{

      public void run() {

            while(true) {

                  try {

                       

                        Thread.sleep(1000);

                  }catch(Exception e) {}

                  System.out.println("*****");

            }

      }

}

 

class Test2 implements Runnable{

 

      @Override

      public void run() {

            // TODO Auto-generated method stub

            while(true) {

                  try {

                       

                        Thread.sleep(1000);

                  }catch(Exception e) {}

                  System.out.println("+++");

            }

      }

     

}

 

[ 실행 결과 ]

HA HA HA !!!

+++

*****

HA HA HA !!!

+++

*****

HA HA HA !!!

+++

*****

*****

HA HA HA !!!

+++

HA HA HA !!!

+++

*****

*****

+++

HA HA HA !!!

HA HA HA !!!

*****

+++

*****

+++

HA HA HA !!!

HA HA HA !!!

+++

*****

HA HA HA !!!

*****

+++

HA HA HA !!!

*****

+++

 

그런데, 쓰레드가 생각한 것 처럼 하나씩 균등하게 실행 되지는 않는다.

즉, 쓰레드는 동시에 여러 작업을 할 수는 있지만 특정 상황에서 항상 그 쓰레드가 실행될 수는 없다.

물론 우선 순위라는 것을 두어 먼저 실행 될 확률을 높여줄 순 있다. 이에 대해선 다음 편에서 다루어 보자.

오늘도 티스토리를 방문해주셔서 감사합니다.

 

 

 

반응형

댓글