java 라인 생성 방법 요약

5321 단어 java스레드 생성
java 생성 스레드
Java는 스레드 클래스Thread를 제공하여 다중 스레드를 만드는 프로그램을 제공합니다.사실, 라인을 만드는 것은 일반적인 클래스를 만드는 대상과 같은 작업이고, 라인을 만드는 것은thread 클래스나 그 하위 클래스의 실례 대상이다.각 Thread 객체는 개별 스레드를 설명합니다.하나의 스레드를 생성하려면 두 가지 방법이 있습니다.
◆ 자바에서lang.Thread 클래스는 새로운 스레드 클래스를 생성하여 run () 방법을 다시 불러옵니다.
◆ Runnalbe 인터페이스를 실현하고 Runnalbe 인터페이스의 run() 방법을 다시 불러옵니다.
왜 Java는 두 가지 방법을 제공하여 스레드를 만들려고 합니까?그것들은 모두 어떤 차이가 있습니까?비교해 보면 어떤 방법이 더 좋을까?
Java에서 클래스는 단일 계승만 지원합니다. 즉, 새로운 클래스를 정의할 때 외부 클래스만 확장할 수 있습니다.이렇게 하면 사용자 정의 루틴 클래스를 만들 때thread 클래스를 확장하는 방법을 통해 이루어진다면 이 사용자 정의 클래스는 다른 클래스를 확장할 수 없고 더욱 복잡한 기능을 실현할 수 없다.따라서 사용자 정의 클래스가 다른 클래스를 확장해야 한다면 Runnable 인터페이스를 실현하는 방법으로 이 클래스를 스레드 클래스로 정의하면 자바 단일 계승이 가져오는 한계를 피할 수 있다.
그리고 가장 중요한 것은 Runnable 인터페이스를 실현하는 방식으로 만든 라인을 사용하여 같은 자원을 처리하여 자원의 공유를 실현하는 것이다.
(1) Thread 클래스 확장을 통해 다중 스레드 생성
한 영화관에 세 개의 매표구가 있다고 가정하면 각각 어린이, 성인, 노인에게 매표한다.영화관은 창구마다 어린이표, 성인표, 노인표 100장을 놓고 있다.세 개의 창구는 동시에 표를 팔아야 하는데, 지금은 한 명의 매표원만 있는데, 이 매표원은 한 개의 CPU에 해당하고, 세 개의 창구는 세 개의 노선에 해당한다.프로그램을 통해 이 세 개의 라인을 어떻게 만드는지 봅시다.

public class MutliThreadDemo {
  public static void main(String [] args){
    MutliThread m1=new MutliThread("Window 1");
    MutliThread m2=new MutliThread("Window 2");
    MutliThread m3=new MutliThread("Window 3");
    m1.start();
    m2.start();
    m3.start();
  }
}
class MutliThread extends Thread{
  private int ticket=100;// 100 
  MutliThread(String name){
    super(name);// 
  }
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
    }
  }
}
프로그램에서 스레드 클래스를 정의합니다. 스레드 클래스를 확장합니다.확장된 스레드 클래스를 이용하여 MutliThreadDemo 클래스의 주 방법에 세 개의 스레드 대상을 만들고 start () 방법으로 각각 시작합니다.
그 결과 각 노선은 각각 100장의 영화표에 대응하고 아무런 관계가 없다는 것을 알 수 있다. 이는 각 노선 간에 평등하고 우선순위 관계가 없기 때문에 CPU를 처리할 기회가 있다는 것을 의미한다.그러나 그 결과 이 세 개의 노선은 순서대로 교체하여 집행되는 것이 아니라 세 개의 노선이 동시에 집행되는 상황에서 어떤 노선은 시간편을 분배받을 기회가 많고 표가 앞당겨 매진되는 반면 어떤 노선은 시간편을 분배받을 기회가 비교적 적으며 표가 늦게 매진되는 것으로 나타났다.
이를 통해 알 수 있듯이 확장 Thread 클래스를 이용하여 만든 여러 개의 라인은 같은 코드를 실행하지만 서로 독립적이고 각자의 자원을 가지고 서로 방해하지 않는다.
(2) Runnable 인터페이스를 통해 다중 스레드 생성


public class MutliThreadDemo2 {
  public static void main(String [] args){
    MutliThread m1=new MutliThread("Window 1");
    MutliThread m2=new MutliThread("Window 2");
    MutliThread m3=new MutliThread("Window 3");
    Thread t1=new Thread(m1);
    Thread t2=new Thread(m2);
    Thread t3=new Thread(m3);
    t1.start();
    t2.start();
    t3.start();
  }
}
class MutliThread implements Runnable{
  private int ticket=100;// 100 
  private String name;
  MutliThread(String name){
    this.name=name;
  }
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+name);
    }
  }
}

이 세 개의 노선도 서로 독립되어 각자의 자원, 즉 100장의 영화표를 가지고 있기 때문에 프로그램 출력의 결과와 (1) 결과는 대동소이하다.모두 각자의 노선이 자신의 표 100장을 단독으로 처리하여 서로 영향을 주지 않는다.
이를 통해 알 수 있듯이 현실적인 상황이 새로운 라인이 서로 독립되고 각자 자원을 가지며 간섭하지 않는다면 어떤 방식으로 다중 라인을 만들 수 있겠는가.이 두 가지 방식으로 만들어진 다중 루틴 프로그램은 같은 기능을 실현할 수 있기 때문이다.
이 세 개의 노선도 서로 독립되어 각자의 자원, 즉 100장의 영화표를 가지고 있기 때문에 프로그램이 출력한 결과와 예4.2.1의 결과는 대동소이하다.모두 각자의 노선이 자신의 표 100장을 단독으로 처리하여 서로 영향을 주지 않는다.
이를 통해 알 수 있듯이 현실적인 상황이 새로운 라인이 서로 독립되고 각자 자원을 가지며 간섭하지 않는다면 어떤 방식으로 다중 라인을 만들 수 있겠는가.이 두 가지 방식으로 만들어진 다중 루틴 프로그램은 같은 기능을 실현할 수 있기 때문이다.
(3) Runnable 인터페이스를 통해 루트 간의 자원 공유를 실현한다
현실에도 이런 상황이 존재한다. 예를 들어 한 기차역의 매표 시스템을 모의한다. 만약에 당일 A지에서 B지로 보내는 기차표가 100장에 불과하고 모든 창구에서 이 100장의 표를 팔 수 있다면 모든 창구도 하나의 노선에 해당한다. 그러나 이때 앞의 예와 다른 점은 모든 노선이 처리하는 자원이 같은 자원, 즉 100장의 차표라는 것이다.만약 아직도 앞의 방식으로 라인을 만드는 것은 분명히 실현할 수 없다면, 이런 상황은 어떻게 처리해야 합니까?아래의 프로그램을 보면 프로그램 코드는 다음과 같다.


public class MutliThreadDemo3 {
  public static void main(String [] args){
    MutliThread m=new MutliThread();
    Thread t1=new Thread(m,"Window 1");
    Thread t2=new Thread(m,"Window 2");
    Thread t3=new Thread(m,"Window 3");
    t1.start();
    t2.start();
    t3.start();
  }
}
class MutliThread implements Runnable{
  private int ticket=100;// 100 
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
    }
  }
}

그 결과 앞에서 분석한 바와 같이 프로그램은 메모리에서 하나의 자원만 만들었고, 새로 만든 세 개의 스레드는 모두 이 같은 자원에 접근하는 것을 바탕으로 하였으며, 모든 스레드에서 실행되는 것은 같은 코드이기 때문에 그들이 실행하는 기능도 같다.
이를 통해 알 수 있듯이 현실 문제에서 같은 작업을 수행하기 위해 여러 개의 라인을 만들어야 하고 이 여러 개의 라인 사이에 같은 자원을 공유해야 한다면 Runnable 인터페이스를 실현하는 방식으로 다중 라인 프로그램을 만들 수 있다.이 기능은 Thread 클래스를 확장함으로써 실현할 수 없습니다. 독자들이 생각해 보세요. 왜요?
Runnable 인터페이스를 실현하는 것은 Thread 클래스 확장에 비해 비교할 수 없는 장점이 있다.이런 방식은 프로그램의 건장성에 유리할 뿐만 아니라 코드가 여러 개의 라인에 공유될 수 있을 뿐만 아니라 코드와 데이터 자원이 상대적으로 독립적이어서 같은 코드를 가진 여러 개의 라인에서 같은 자원을 처리하는 상황에 특히 적합하다.이렇게 되면 스레드, 코드와 데이터 자원 세 가지를 효과적으로 분리하여 대상 프로그램 설계를 위한 사상을 잘 나타냈다.따라서 거의 모든 다중 루틴 프로그램은 Runnable 인터페이스를 실현하는 방식으로 이루어진다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기