>  기사  >  Java  >  Java 멀티스레딩에서 Thread와 Runnable의 차이점에 대한 자세한 설명

Java 멀티스레딩에서 Thread와 Runnable의 차이점에 대한 자세한 설명

黄舟
黄舟원래의
2017-08-20 09:17:472023검색

이 글에서는 주로 Java 멀티 스레드 Thread와 Runnable의 차이점에 대한 관련 정보를 소개합니다. Java 스레드에는 스레드 클래스를 상속하고 실행 가능한 인터페이스를 구현하는 두 가지 방법이 있습니다. 아래에는 도움이 필요한 친구들이 참고할 수 있습니다. it

Java 멀티 스레드 Thread와 Runnable의 차이점

Java에서 멀티 스레드를 구현하는 방법에는 두 가지가 있습니다. Thread 클래스를 상속하고 실행 가능한 인터페이스를 구현합니다

1, Thread 클래스를 상속하고 재정의합니다. 상위 클래스 run() 메소드


  public class thread1 extends Thread {
 
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.run();
        th2.run();
    }
   }

run() 메소드는 일반적인 메소드로 순차적으로 실행됩니다. 즉, th1.run()이 완료된 후에만 th2.run()이 실행됩니다. 이렇게 하면 하나의 메인 스레드만 사용됩니다. 멀티스레딩은 의미가 없으므로 start() 메서드를 사용하여 스레드를 시작해야 합니다. start() 메서드는 자동으로 run() 메서드를 호출합니다. 위의 코드는 다음과 같이 변경됩니다.


 public class thread1 extends Thread {
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.start();
        th2.start();
    }
}

start() 메소드를 통해 새 스레드를 시작합니다. 이렇게 하면 th1.start()가 호출한 run() 메서드의 실행 여부와 관계없이 th2.start()가 계속 실행됩니다. 아래에 다른 코드가 있으면 th2를 기다릴 필요가 없습니다. start() 실행을 완료하고 실행을 계속합니다. (출력 스레드 ID는 무작위로 교대로 출력됩니다.)

2, runnable 인터페이스 구현


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        th1.run();
        th2.run();
    }
}

Thread의 실행 방법과 동일하며 Runnable의 실행은 일반적인 방법입니다. 기본 메소드 th2.run()은 th1.run()이 실행될 때까지 기다려야 프로그램이 하나의 스레드만 사용합니다. 멀티스레딩 목적을 위해서는 Thread의 start() 메소드도 사용해야 합니다(runnable에는 시작 메소드가 없습니다). 위 코드는 다음과 같이 수정됩니다.


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        Thread myth1 = new Thread(th1);
        Thread myth2 = new Thread(th2);
        myth1.start();
        myth2.start();
    }
}

Summary: Java 멀티스레딩을 구현하는 2가지 방법, runable은 인터페이스, thread는 클래스, runnable은 하나의 실행 메소드만 제공하므로 runable을 사용하는 것이 좋습니다. Java 멀티스레딩을 구현하려면 무엇이든 상관없이 궁극적으로 thread.start()를 전달하여 스레드를 실행 가능한 상태로 만들어야 합니다.

위 내용은 Java 멀티스레딩에서 Thread와 Runnable의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.