Java에서 Runnable과 Thread의 차이점 분석
다음은 예:
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 인터페이스의 하위 클래스인 것을 발견했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 멀티스레드 Thread 및 Runnable 구현자바에서는 단일 계승만 허용하지만 여러 개의 인터페이스를 허용하기 때문에 두 번째 방법은 더욱 유연하다. 상속 Thread 클래스 정의 스레드 상속 Thread 클래스 정의 스레드 프로그램 시작...0 Thread ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.