예를 들어 Java의 다중 루틴 프로그래밍에 대해 설명합니다.

5637 단어 Java라인
Java 생성 스레드(Runnable 인터페이스 및 Thread 클래스)
대부분의 경우 Thread 객체를 실례화하여 스레드를 생성합니다.Java는 다음과 같은 두 가지 방식을 정의합니다.
  • Runnable 인터페이스 구현;
  • Thread 클래스를 상속할 수 있습니다.
  • 다음은 순서대로 모든 방식을 소개했다.
    Runnable 인터페이스 구현
    라인을 만드는 가장 간단한 방법은 Runnable 인터페이스를 실현하는 클래스를 만드는 것이다.Runnable은 실행 코드 단원을 추상화했습니다.너는 Runnable 인터페이스를 실현하는 방법을 통해 모든 대상의 라인을 만들 수 있다.Runnable 인터페이스를 실현하기 위해서는 하나의 클래스가 run()을 실현하는 간단한 방법만 필요합니다. 이 방법은 다음과 같습니다.
    
      public void run( )
    run () 에서 코드를 정의하여 새로운 라인을 구축할 수 있습니다.다음 내용을 이해하는 것은 매우 중요하다. run () 방법은 메인 라인처럼 다른 방법을 호출하고 다른 종류를 인용하며 변수를 설명할 수 있다.유일한 차이점은 run () 이 프로그램에서 다른 병행 루틴 실행 입구를 확립하는 것이다.run () 이 되돌아오면 이 스레드가 끝납니다.
    Runnable 인터페이스를 실현하는 클래스를 만든 후, 클래스 내부에서thread 클래스의 대상을 실례화해야 합니다.Thread 클래스는 여러 가지 구조 함수를 정의합니다.우리는 다음과 같이 사용할 것이다.
    
      Thread(Runnable threadOb, String threadName)
    이 구조 함수에서threadOb는 Runnable 인터페이스 클래스를 실현하는 실례입니다.이것은 스레드 실행의 시작점을 정의합니다.새 스레드의 이름은threadName에서 정의합니다.
    새 라인을 만든 후, start () 방법을 호출할 때까지 실행하지 않습니다. 이 방법은Thread 클래스에서 정의됩니다.본질적으로, start () 는 run () 에 대한 호출을 실행합니다.Start() 메서드는 다음과 같이 선언합니다.
    
      void start( )
    다음 예는 새 스레드를 만들고 실행하는 것입니다.
    
    // Create a second thread.
    class NewThread implements Runnable {
      Thread t;
      NewThread() {
        // Create a new, second thread
        t = new Thread(this, "Demo Thread");
        System.out.println("Child thread: " + t);
        t.start(); // Start the thread
      }
    
      // This is the entry point for the second thread.
      public void run() {
        try {
          for(int i = 5; i > 0; i--) {
            System.out.println("Child Thread: " + i);
            Thread.sleep(500);
          }
        } catch (InterruptedException e) {
          System.out.println("Child interrupted.");
        }
        System.out.println("Exiting child thread.");
      }
    }
    
    class ThreadDemo {
      public static void main(String args[]) {
        new NewThread(); // create a new thread
        try {
          for(int i = 5; i > 0; i--) {
            System.out.println("Main Thread: " + i);
            Thread.sleep(1000);
          }
        } catch (InterruptedException e) {
          System.out.println("Main thread interrupted.");
        }
        System.out.println("Main thread exiting.");
      }
    }
    
    
    NewThread 구조 함수에서 새 Thread 객체는 다음 문장에서 생성됩니다.
    
      t = new Thread(this, "Demo Thread");
    앞의 문장this를 통해this 대상에서 run () 방법을 호출하고 싶다는 것을 보여 줍니다.그리고 start () 가 호출되어run () 방법으로 라인의 실행을 시작합니다.이것은 하위 스레드 for 순환을 실행하기 시작합니다.start()를 호출하면 NewThread의 구조 함수가main()으로 되돌아옵니다.주 라인이 복구되면 for 순환에 도달합니다.순환이 끝날 때까지 두 스레드가 계속 실행되고 CPU를 공유합니다.이 프로그램의 출력은 다음과 같습니다.
    
    Child thread: Thread[Demo Thread,5,main]
    Main Thread: 5
    Child Thread: 5
    Child Thread: 4
    Main Thread: 4
    Child Thread: 3
    Child Thread: 2
    Main Thread: 3
    Child Thread: 1
    Exiting child thread.
    Main Thread: 2
    Main Thread: 1
    Main thread exiting.
    
    앞에서 언급한 바와 같이, 다중 루틴 프로그램에서 일반적인 주 루틴은 실행을 끝내는 마지막 루틴이어야 한다.실제로 일부 오래된 JVM은 메인 스레드가 하위 스레드보다 먼저 끝나면 Java의 운행 시간 시스템이 끊길 수 있다.상술한 프로그램은 메인 라인의 마지막 종료를 보장했다. 왜냐하면 메인 라인의 침수 주기는 1000밀리초이고 하위 라인은 500밀리초에 불과하기 때문이다.이것은 하위 라인을 주 라인이 끝나기 전에 먼저 끝내게 한다.요컨대, 너는 라인이 끝날 때까지 기다리는 더 좋은 방법을 보게 될 것이다.
    확장 스레드
    라인을 만드는 또 다른 방법은 Thread 클래스를 확장하기 위해 새 클래스를 만들고 이 클래스의 실례를 만드는 것입니다.클래스가 Thread를 계승할 때, run () 방법을 다시 불러와야 합니다. 이 run () 방법은 새 라인의 입구입니다.새 스레드 실행을 시작하려면 start () 방법을 사용해야 합니다.다음은 확장thread 클래스로 앞의 프로그램을 다시 씁니다.
    
    // Create a second thread by extending Thread
    class NewThread extends Thread {
      NewThread() {
        // Create a new, second thread
        super("Demo Thread");
        System.out.println("Child thread: " + this);
        start(); // Start the thread
      }
    
      // This is the entry point for the second thread.
      public void run() {
        try {
          for(int i = 5; i > 0; i--) {
            System.out.println("Child Thread: " + i);
            Thread.sleep(500);
          }
        } catch (InterruptedException e) {
          System.out.println("Child interrupted.");
        }
        System.out.println("Exiting child thread.");
      }
    }
    
    class ExtendThread {
      public static void main(String args[]) {
        new NewThread(); // create a new thread
        try {
          for(int i = 5; i > 0; i--) {
            System.out.println("Main Thread: " + i);
            Thread.sleep(1000);
          }
        } catch (InterruptedException e) {
          System.out.println("Main thread interrupted.");
        }
        System.out.println("Main thread exiting.");
      }
    }
    
    
    이 프로그램은 상술한 버전과 같은 출력을 생성합니다.하위 스레드는 실례화된 NewThread 객체에서 생성되며 이 객체는 Thread 클래스에서 파생됩니다.NewThread에서 super() 호출을 주의하십시오.이 메서드는 다음과 같은 Thread 구조 함수를 호출합니다.
    
      public Thread(String threadName)
    threadName에서 스레드 이름을 지정합니다.
    적합한 방법을 선택하다
    여기까지 오면 왜 자바에 두 가지 서브루틴을 만드는 방법이 있는지 이상할 것이다. 어떤 것이 더 좋을까.모든 문제는 한 가지로 귀착된다.Thread 클래스는 파생 클래스에 재부팅될 수 있는 여러 가지 방법을 정의합니다.모든 방법에 대해 유일하게 다시 불러와야 하는 것은run () 방법이다.이것은 당연히 Runnable 인터페이스를 실현하는 데 필요한 똑같은 방법이다.많은 자바 프로그래머들은 클래스가 강화되거나 수정될 때만 확장되어야 한다고 생각한다.따라서 Thread의 다른 방법을 다시 불러오지 않을 때는 Runnable 인터페이스만 실행하는 것이 좋습니다.이것은 당연히 네가 결정해야 한다.그러나 본 장의 다른 부분에서 우리는 runnable 인터페이스를 실현하는 클래스를 응용하여 라인을 만듭니다.

    좋은 웹페이지 즐겨찾기