학원/JAVA

10/11 18-7 RunnableApp

도원결의 2022. 10. 11. 23:14

RunnableApp

앞에서도 말했듯이 클래스는 1개밖에 상속 못받음

이미 클래스를 상속 받았는데 스레드를 이용하고 싶다면 Runnable 인터페이스를 상속받으면되지롱


class Solidier {
     void longedMethod() {
              for(int i =1 ; i<=10 ; i++) {
                    System.out.println(String.format("스레드명:%s,i=%d",Thread.currentThread().getName(),i));
                        try {
                              Thread.sleep(1000);
                               } catch (InterruptedException e) {e.printStackTrace();}
                            }
                        }
           }///////Solidier

class Commander extends Solidier implements Runnable { ===>runnable인터페이스에는  run메소드 하나있음
       클래스는 1개밖에 상속못받는 한계
       run메소드 오버라이딩
                    @Override
                     public void run() {
                                   longedMethod(); 
                                      } 
           }/////////Commander


메인

Commander commander = new Commander();
System.out.println(commander instanceof Commander);
System.out.println(commander instanceof Solidier);
System.out.println(commander instanceof Runnable);
System.out.println(commander instanceof Thread);  상속을 못 받아서 못씀.... thread 타입이 아니얌.

         대신 Runnable인터페이스가 있으니 스레드 구현은 가능하지!!
      **** Runnable을 스레드로 변환하려면 스레드 인자생성자 이용
Thread th1 = new Thread(commander);
th1.setName("첫 번째 스레드");
th1.start();
Thread th2 = new Thread(commander, "두 번째 스레드");
th2.start();

 

==> 출력

스레드명:두 번째 스레드,i=1
스레드명:첫 번째 스레드,i=1
스레드명:두 번째 스레드,i=2
스레드명:첫 번째 스레드,i=2
스레드명:두 번째 스레드,i=3
스레드명:첫 번째 스레드,i=3
스레드명:두 번째 스레드,i=4
스레드명:첫 번째 스레드,i=4
스레드명:두 번째 스레드,i=5
스레드명:첫 번째 스레드,i=5
스레드명:두 번째 스레드,i=6
스레드명:첫 번째 스레드,i=6
스레드명:두 번째 스레드,i=7
스레드명:첫 번째 스레드,i=7
스레드명:두 번째 스레드,i=8
스레드명:첫 번째 스레드,i=8
스레드명:두 번째 스레드,i=9
스레드명:첫 번째 스레드,i=9
스레드명:두 번째 스레드,i=10
스레드명:첫 번째 스레드,i=10

 

 

역시 순서는 랜덤으로!