자바 다 중 스 레 드 는 인터페이스 Runnable 과 계승 Thread 의 차 이 를 실현 합 니 다.

4302 단어 JAVA
자바 에는 다 중 스 레 드 를 실현 하 는 두 가지 방식 이 있다.하 나 는 Thread 류 를 직접 계승 하 는 것 이 고,다른 하 나 는 Runnable 인 터 페 이 스 를 실현 하 는 것 이다.그렇다면 이 두 가지 다 중 스 레 드 를 실현 하 는 방식 은 응용 에 있어 어떤 차이 가 있 습 니까?  
인터넷 에 널리 퍼 진 것 은 인터넷 매 표 시스템 이다.
        이 문제 에 대답 하기 위해 서 우 리 는 설명 을 통 해 코드 를 만들어 분석 할 수 있다.우 리 는 코드 로 철도 매 표 시스템 을 모 의 하여 네 개의 매 표 소 를 통 해 어느 날 한 열차 의 100 장의 차 표를 판매 하고 한 매 표 소 는 한 라인 으로 표시 한다.  
        우 리 는 우선 이 프로그램 을 이렇게 작성 합 니 다.
class ThreadTest extends Thread{  
  private int ticket = 100;  
  public void run(){  
    while(true){  
      if(ticket > 0){  
        System.out.println(Thread.currentThread().getName() +  "is selling ticket" + ticket--);  
      }else{  
        break;  
      }  
    }  
  }  
}

main 테스트 클래스: 
public class ThreadDome1{  
  public static void main(String[] args){  
    ThreadTest t = new ThreadTest();  
    t.start();  
    t.start();  
    t.start();  
    t.start();  
  }  
} 

위의 코드 에서 저 희 는 ThreadTest 류 로 매표소 의 매 표 과정 을 모 의 했 습 니 다.run 방법 중의 모든 순환 은 총 표 수 를 1 로 줄 이 고 차표 한 장 을 모 의 판매 하 는 동시에 이 차표 번 호 를 인쇄 하여 나머지 표 수 는 0 까지 입 니 다.ThreadDemo 1 류 의 main 방법 에서 우 리 는 하나의 스 레 드 대상 을 만 들 고 네 번 반복 해서 시작 합 니 다.이런 방식 으로 네 개의 스 레 드 를 만 들 기 를 바 랍 니 다.실행 결 과 를 보면 우 리 는 사실 하나의 스 레 드 만 실행 되 고 있다 는 것 을 알 게 되 었 습 니 다.이 결 과 는 하나의 스 레 드 대상 이 하나의 스 레 드 만 시작 할 수 있 습 니 다.start()방법 을 몇 번 호출 하 든 결 과 는 하나의 스 레 드 만 있 습 니 다. 
      이 어 ThreadDemo 1 을 수정 하여 main 방법 에서 4 개의 Thread 대상 을 만 듭 니 다.
public class ThreadDemo1{  
  public static void main(String[] args){  
    new ThreadTest().start();  
    new ThreadTest().start();  
    new ThreadTest().start();  
    new ThreadTest().start();  
  }  
}  
class ThreadTest extends Thread{  
  private int ticket = 100;  
  public void run(){  
    while(true){  
      if(ticket > 0){  
        System.out.println(Thread.currentThread().getName() + " is selling ticket" + ticket--);  
      }else{  
        break;  
      }  
    }  
  }  
}

 이제 목적 을 달 성 했 습 니까? 
     결과 적 으로 볼 때 각 표 번 호 는 네 번 인쇄 되 었 다.즉,네 개의 스 레 드 는 각각 100 장의 표를 팔 고 공 통 된 100 장의 표를 팔 지 않 는 다.이런 상황 은 어떻게 생 긴 것 입 니까?우리 가 필요 로 하 는 것 은 여러 개의 스 레 드 가 같은 자원 을 처리 하 는 것 이다.하나의 자원 은 하나의 대상 에 만 대응 할 수 있다.위의 프로그램 에서 우 리 는 네 개의 ThreadTest 대상 을 만 들 었 다.즉,네 개의 자원 을 만 든 것 과 같다.모든 자원 은 100 장의 표 가 있 고 모든 스 레 드 는 각자 의 자원 을 혼자서 처리 하고 있다. 
     이러한 실험 과 분석 을 통 해 이 철도 매 표 절 차 를 실현 하려 면 우 리 는 하나의 자원 대상 만 만 만 들 수 있 지만 여러 개의 스 레 드 를 만들어 같은 자원 대상 을 처리 하고 모든 스 레 드 에서 실행 하 는 것 은 같은 프로그램 코드 라 는 것 을 정리 할 수 있다.인터페이스 로 다 중 스 레 드 를 만 드 는 과정 을 돌 이 켜 보 자.
public class ThreadDemo1{  
  public static void main(String[] args){  
    ThreadTest t = new ThreadTest();  
    new Thread(t).start();  
    new Thread(t).start();  
    new Thread(t).start();  
    new Thread(t).start();  
  }  
}  
class ThreadTest implements Runnable{  
  private int tickets = 100;  
  public void run(){  
    while(true){  
      if(tickets > 0){  
        System.out.println(Thread.currentThread().getName() + " is selling ticket " + tickets--);  
      }  
    }  
  }  
}  

위의 프로그램 에서 네 개의 스 레 드 를 만 들 었 습 니 다.모든 스 레 드 는 같은 ThreadTest 대상 의 run()방법 을 호출 했 습 니 다.같은 대상 의 변수(ticket)의 인 스 턴 스 를 방문 하 였 습 니 다.이 프로그램 은 우리 의 수 요 를 만족 시 켰 습 니 다.Windows 에서 여러 개의 메모 장 프로그램 을 시작 할 수 있 습 니 다.즉,여러 프로 세 스 가 같은 메모 장 프로그램 코드 를 사용 하 는 것 입 니 다. 
       이 를 통 해 알 수 있 듯 이 Runnable 인 터 페 이 스 를 실현 하 는 것 은 Thread 류 를 계승 하 는 것 에 비해 다음 과 같은 현저 한 장점 이 있다. 
(1)여러 개의 같은 프로그램 코드 의 스 레 드 가 같은 자원 을 처리 하 는 상황 에 적합 하고 가상 CPU(스 레 드)와 같은 프로그램의 코드,데 이 터 를 효과적으로 분리 하여 대상 을 대상 으로 하 는 디자인 사상 을 잘 나 타 냈 다. 
(2)자바 의 단일 계승 특성 으로 인 한 한 계 를 피 할 수 있다.우 리 는 이러한 상황 을 자주 만난다.즉,우 리 는 이미 어떤 유형의 하위 클래스 를 다 중 스 레 드 에 넣 어야 한다.한 가지 클래스 가 두 개의 부모 클래스 를 동시에 가 질 수 없 기 때문에 Thread 류 를 계승 하 는 방식 을 사용 할 수 없다.그러면 이런 종 류 는 Runnable 인 터 페 이 스 를 실현 하 는 방식 만 사용 할 수 있다. 
(3)프로그램의 건장 성에 유리 하고 코드 는 여러 스 레 드 에 의 해 공유 되 며 코드 와 데 이 터 는 독립 적 이다.여러 스 레 드 의 실행 코드 가 같은 종류의 인 스 턴 스 에서 왔 을 때 같은 코드 를 공유 하 는 것 이 라 고 합 니 다.여러 스 레 드 가 같은 데 이 터 를 조작 하 는 것 은 그들의 코드 와 무관 하 다.공유 접근 이 같은 대상 은 같은 데 이 터 를 공유 하 는 것 이다.스 레 드 가 구 조 될 때 필요 한 코드 와 데 이 터 는 하나의 대상 을 통 해 구조 함수 의 실제 인삼 으로 전달 되 는데 이 대상 은 Runnable 인 터 페 이 스 를 실현 하 는 인 스 턴 스 입 니 다.

좋은 웹페이지 즐겨찾기