Thread와 Runnable의 차이점

3403 단어 threadRunnable
1. Thread와 Runnable은 자바 다중 루틴을 실현하는 두 가지 방식이고 각자의 실현 방식은 다음과 같다.
(1) Thread를 사용한 다중 스레드
클래스를 Thread 클래스의 run 메서드를 다시 쓰는 하위 클래스로 선언합니다.
class PrimeThread extends Thread {
       longminPrime;
       PrimeThread(longminPrime) {
              this.minPrime= minPrime;
       }
       publicvoid run() {
              //compute primes larger than minPrime
              .. .
       }
}

다음에 라인을 만들고 시작합니다.
PrimeThread p = new PrimeThread(143);
p.start();

(2) Runnable로 멀티스레드 구현
Runnable 인터페이스를 실현하는 클래스를 설명하고, 이 클래스를 실행한 다음run 방법을 설명합니다.
class PrimeRun implements Runnable {
       longminPrime;
       PrimeRun(longminPrime) {
              this.minPrime= minPrime;
       }
       publicvoid run() {
              //compute primes larger than minPrime
              .. .
       }
}

다음에 라인을 만들고 시작합니다.
PrimeRun p = new PrimeRun(143);
new Thread(p).start();

2. Runnable 인터페이스와 Thread 클래스 간의 연결:
public class Thread extends Object implementsRunnable

Thread 클래스도 Runnable 인터페이스의 하위 클래스입니다.
3. Thread와 Runnable는 자바 다중 루틴을 실현하는 두 가지 방식이고 Thread는 클래스이며 Runnable는 인터페이스이기 때문에 Runnable를 사용하여 다중 루틴을 실현하는 것을 권장한다.두 가지 이유가 있습니다.
(1) 자바 언어의 클래스는 단일 계승만 지원하고 인터페이스는 다중 계승을 지원한다.자바에서 다중 계승 기능은 인터페이스(interface)를 통해 간접적으로 이루어진다.Runnable 인터페이스로 멀티스레드를 구현하는 것이 Thread 클래스로 멀티스레드를 구현하는 것보다 낫다는 것을 알 수 있다.
(2) Runnable 인터페이스는 자원의 공유에 적합하다.
코드 1:
public class ThreadDemo
{  
   public static void main(String []args)  
   {  
       ThreadTest t=new ThreadTest();  
       t.start();  
       t.start();  
       t.start();  
       t.start();  
   }  
}  
class ThreadTest extends Thread  
{  
   private int count=10;  
   public void run()  
   {  
       while(count>0)  
       {  
           System.out.println(Thread.currentThread().getName()+"   "+count--);  
       }  
   }  
}

결론: 우리는 사실 한 라인만 가동된 것을 발견했다.
코드 2:
public class ThreadDemo  
{  
   public static void main(String []args)  
   {  
       new ThreadTest().start();  
       new ThreadTest().start();  
       new ThreadTest().start();  
       new ThreadTest().start();  
   }  
}  
class ThreadTest extends Thread  
{  
   private int count=10;  
   public void run()  
   {  
       while(count>0)  
       {  
           System.out.println(Thread.currentThread().getName()+"   "+count--);  
       }  
   }  
}

결론: 우리는 네 개의 라인을 가동한 것을 발견했다. 그들은 각자 자신의 자원을 차지하고 각각 10장의 표를 팔았으며 모두 40장의 표를 팔았다.Thread 클래스는 실제로 자원 공유의 목적을 달성할 수 없습니다.
코드 3:
public class ThreadDemo  
{  
   public static void main(String []args)  
   {  
       ThreadTest test=new ThreadTest();  
       new Thread(test).start();  
       new Thread(test).start();  
       new Thread(test).start();  
       new Thread(test).start();  
   }  
}  
class ThreadTest implements Runnable  
{  
   private int count=10;  
   public void run()  
   {  
       while(count>0)  
       {  
           System.out.println(Thread.currentThread().getName()+"   "+count--);  
       }  
   }  
} 

결론: 우리도 네 개의 라인을 가동한 것을 발견했지만 자원을 공유했고 모두 10장의 표를 팔았다.즉, Runnable을 사용하여 다중 루트를 실현하면 자원 공유의 목적을 달성할 수 있다.

좋은 웹페이지 즐겨찾기