10/11 18-7 RunnableApp
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
역시 순서는 랜덤으로!