Java에서 Runnable과 Thread의 차이점 분석

4111 단어 RunnableThread
Thread 클래스는java입니다.lang 패키지에 정의되어 있습니다.하나의 클래스는Thread클래스를 계승하고 이 클래스의run()방법을 덮어쓰면 다중 스레드 조작을 실현할 수 있지만 하나의 클래스는 하나의 부류만 계승할 수 있다. 이것은 이 방법의 한계이다.
다음은 예:

  package org.thread.demo;

  class MyThread extends Thread{

  private String name;

  public MyThread(String name) {

  super();

  this.name = name;

  }

  public void run(){

  for(int i=0;i<10;i++){

  System.out.println(" :"+this.name+",i="+i);

  }

  }

  }

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread(" a");

  MyThread mt2=new MyThread(" b");

  mt1.run();

  mt2.run();

  }

  }

그러나 이때 결과는 매우 규칙적이다. 먼저 첫 번째 대상이 집행된 다음에 두 번째 대상이 집행되고 서로 운행하지 않는다.JDK 문서에서 start() 메서드가 호출되면 JVM을 통해 run() 메서드를 찾을 수 있습니다.다음 시작
start () 메서드 시작 루틴:

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread(" a");

  MyThread mt2=new MyThread(" b");

  mt1.start();

  mt2.start();

  }

  };

이렇게 하면 프로그램이 정상적으로 상호작용 운행을 완성할 수 있다.그럼 왜 굳이 start () 를 사용해야 합니까?방법은 다중 스레드를 시작합니까?
JDK의 설치 경로에서 src.zip은 모든 자바 원본 프로그램으로 이 코드를 통해Thread의start() 방법의 정의를 찾을 수 있으며, 이 방법에서privatenativevoidstart0()을 사용한 것을 발견할 수 있습니다.그 중에서 native 키워드는 운영체제의 기본 함수를 호출할 수 있음을 나타낸다. 그러면 이런 기술은 JNI기술(java Native Interface)이 된다
・ Runnable 커넥터
실제 개발에서 다중 스레드의 작업은 Thread 클래스를 거의 사용하지 않고 Runnable 인터페이스를 통해 이루어졌습니다.예:

  public interface Runnable{

  public void run();

  }


그러나 Runnable로 정의된 하위 클래스에는 start () 방법이 없고 Thread 클래스에만 있습니다.이때 Thread 클래스를 관찰하면 하나의 구조 방법이 있다.public Thread(Runnable targer) 이 구조 방법은 Runnable의 하위 클래스 실례를 받아들인다. 즉, Thread 클래스를 통해 Runnable가 실현하는 다중 라인을 시작할 수 있다는 것이다.(start() 시스템의 자원을 조정할 수 있음):

  package org.runnable.demo;

  class MyThread implements Runnable{

  private String name;

  public MyThread(String name) {

  this.name = name;

  }

  public void run(){

  for(int i=0;i<100;i++){

  System.out.println(" :"+this.name+",i="+i);

  }

  }

  };

두 가지 실현 방식의 차이와 연계:
프로그램 개발에서 다중 루틴이라면 틀림없이 영원히 Runnable 인터페이스를 실현하는 것을 위주로 할 것이다. 왜냐하면 Runnable 인터페이스를 실현하는 것보다
Thread 클래스를 상속하면 다음과 같은 이점이 있습니다.
-> 점 계승의 한계를 피하고 한 종류가 여러 인터페이스를 계승할 수 있습니다.
-> 자원 공유에 적합
매표 프로그램을 예로 들면, Thread 클래스를 통해 완성:

  package org.runnable.demo;

  import org.runnable.demo.MyThread;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread(" a");

  MyThread mt2=new MyThread(" b");

  new Thread(mt1).start();

  new Thread(mt2).start();

  }

  }

다음은 세 개의 라인을 통해 동시에 표를 판매합니다

  package org.demo.dff;

  class MyThread extends Thread{

  private int ticket=10;

  public void run(){

  for(int i=0;i<20;i++){

  if(this.ticket>0){

  System.out.println(" :ticket"+this.ticket--);

  }

  }

  }

  };

Runnable을 사용하면 자원 공유를 실현할 수 있다. 다음은 예:.현재 프로그램에는 세 개의 라인이 있지만 모두 10장의 표를 팔았다. 즉, Runnable를 이용하여 다중 라인을 실현하면 자원 공유의 목적을 달성할 수 있다는 것이다.
Runnable 인터페이스와 Thread 간의 연결:
  public class Thread extends Object implements Runnable
Thread 클래스도 Runnable 인터페이스의 하위 클래스인 것을 발견했습니다.

좋은 웹페이지 즐겨찾기