2012-01-21 15 views
10

Sono un neofita della programmazione dei thread in Java e quindi questa domanda di base. (Ho controllato, ma non ho trovato questa domanda precedentemente fatta)Scenario di estensione della classe Thread e implementazione dell'interfaccia Runnable

Ho letto che i thread possono essere creati o ereditando la classe Thread o implementando l'interfaccia Runnable. Ho visto un codice che aveva entrambi nella stessa classe.

public class ThreadExample extends Thread implements Runnable { 
} 

Mi chiedevo che tipo di situazione vorrebbe questo e se non v'è alcun vantaggio a questo, di cosa si tratta.

risposta

11

estendentesi Threade attuazione Runnable è inutile (Thread implementa già Runnable). È più o meno sempre desidera implementare Runnable (e non estendere Thread). Ciò ti dà la possibilità di utilizzare direttamente un Thread (non consigliato) o di utilizzare una delle più recenti implementazioni ThreadPool in java.util.concurrent (consigliato).

4

No, non vi è alcun vantaggio di utilizzare questo approccio, perché, la classe Thread implementa l'interfaccia Runnable. Quindi, se la tua classe estende la classe Thread. Significa che sta anche implementando l'interfaccia Runnable.

http://www.developerfusion.com/pix/articleimages/may05/javathread3.jpg

4

in questa specifica situazione non è molto utile, come altri utenti hanno spiegato E 'abbastanza ovvio che Thread implementa già Runnable.

In alcuni casi, "affermare l'ovvio" può essere utile, però, solo come un "promemoria" per l'utente della classe: se si dispone di un gran gerarchia di super-classi e interfacce, con diversi livelli di ereditarietà (alcuni di essi in librerie di terze parti), potrebbe essere utile come helper per dichiarare una classe come implementazione di un'interfaccia specifica, anche se la implementa per definizione perché la sua superclasse già la implementa o implementa uno dei sottoclasse di quell'interfaccia.

esso specialmente utile con interfacce marcatori (alcune persone potrebbero obiettare che non devono essere utilizzati a tutti, e sono cattive pratiche - bene a volte non si controlla l'ambiente completamente), ossia le interfacce con alcuna implementazione reale e appena progettato per contrassegnare il tuo oggetto idoneo per una funzione speciale (ad esempio Cloneable). In tal caso, contrassegnare ciascuna delle classi consentite anche se i loro genitori sono già idonei può essere più esplicito, quindi più utile.

-1

interfaccia Runnable significa assegnare un lavoro a molte discussioni mentre classe Thread, ciascuno dei fili ha un oggetto unico associato.

+0

questo non è in alcun modo nemmeno correggere in remoto –

+0

Si prega di leggere [Come scrivere una buona risposta?] (Http://stackoverflow.com/help/how-to-answer) prima di tentare di rispondere a più domande. –

-1

L'implementazione di un'interfaccia eseguibile sarebbe preferibile quando è necessaria una maggiore flessibilità per estendere altre classi di base.

+0

Per favore leggi [Come scrivere una buona risposta?] (Http://stackoverflow.com/help/how-to-answer) prima di provare a rispondere ad altre domande. –

+0

L'ho già letto. Per favore dimmi - Che cosa c'è di sbagliato nella mia risposta? – rashedcs

Problemi correlati