English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

La differenza tra thread e runnable in Java

Ci sono due metodi per creare nuovi thread di esecuzione. Uno è dichiarare una classe come sottoclasse di Thread. Questa sottoclasse deve sovrascrivere il metodo run della classe Thread. Poi è possibile assegnare e avviare un'istanza della sottoclasse.

Un altro metodo per creare un thread è dichiarare una classe che implementa l'interfaccia Runnable. Poi, la classe implemente il metodo run. Poi può assegnare un'istanza di questa classe, passarla come parametro durante la creazione di Thread e avviarla.

Ogni thread ha un nome per essere riconosciuto. Più di un thread possono avere lo stesso nome. Se non viene specificato un nome durante la creazione del thread, verrà generato un nuovo nome.

NumeroChiaveLineaEseguibile
1
Base 
Thread è una classe. Utilizzata per creare thread 
Runnable è un'interfaccia funzionale utilizzata per creare thread 
2
Metodi
Ha molti metodi, tra cuistart()erun()
Ha solo metodi astratti run()
3
 Ogni thread crea un oggetto unico e lo associa
Molte thread condividono lo stesso oggetto.
4
Memoria 
Richiede più memoria 
Richiede meno memoria 
5
Limitazioni 
In Java non è permesso il multiplo ereditamento, quindi una volta che una classe ha esteso la classe Thread, non può estendere altre classi
Se una classe sta implementando l'interfaccia Runnable, la tua classe può estendere un'altra classe.

Esempio eseguibile

class RunnableExample implements Runnable{
   public void run(){
      System.out.println("Thread è in esecuzione per l'implementazione Runnable");
   }
   public static void main(String args[]){
      RunnableExample runnable = new RunnableExample();
      Thread t1 = new Thread(runnable);
      t1.start();
   }
}

Esempio di thread

class ThreadExample extends Thread{
   public void run(){
      System.out.println("Thread è in esecuzione");
   }
   public static void main(String args[]){
      ThreadExample t1 = new ThreadExample();
      t1.start();
   }
}