Qualcuno ha qualche idea della storia del metodo run() della classe Thread di Java che è pubblico? Quasi sempre, viene utilizzato da override e quindi il modificatore protetto sarebbe stato più appropriato? Ciò lascerebbe comunque l'inizio() come api pubbliche per gli utenti e quindi non lascia spazio a errori con utenti che chiamano run() accidentalmente.Vantaggi del modificatore pubblico su Java Thread run()
risposta
Thread
implementa Runnable
, che definisce il metodo run()
, quindi deve essere pubblico.
Ma poiché Java 1.5 è consigliabile utilizzare Executors services anziché java.lang.Thread
. Gli esecutori stanno disaccoppiando l'unità di lavoro da eseguire (Runnable
, Callable
) dall'attuale esecutore. (Con Thread
erano la stessa cosa)
run
è definito nell'interfaccia Runnable
e tutti i metodi definiti in un'interfaccia sono pubblici.
Grazie, ma avrei dovuto aggiungere qualche altro nella mia domanda: Thread ha davvero bisogno di implementare Runnable quando fa tutto il suo lavoro sul target Runnable iniettato al suo interno? – gshx
È meglio non sovrascrivere Thread, è necessario creare un Runnable e passarlo nel costruttore per il nuovo Thread. In questo modo il lavoro svolto, il Runnable, viene tenuto separato dal meccanismo di implementazione, il Thread.
Nathan, sono d'accordo con te ed è per questo che mi chiedo perché è lì in primo luogo - qual è l'uso di Thread che implementa Runnable quando la classe Thread ha già un costruttore che accetta un Runnable che esegue l'override di run() – gshx
@gshx : Bella domanda, suppongo che sia fornita come scorciatoia. –
Penso che sia fondamentalmente un cattivo progetto che, nell'interesse di rendere le cose "semplici" per l'utente, consentiva di accoppiare il task da eseguire (il Runnable
) al thread per eseguirlo direttamente. Dal momento che Thread
è stato aggiunto in JDK 1.0, tuttavia, da quel momento il design non è stato più in grado di essere modificato, solo deprecato (in ordine di sorta) a favore del framework Executor
. JDK 1.0 è stato molto tempo fa e da allora sono stati commessi vari errori senza il beneficio dell'esperienza.
In realtà sono favorevole alla deprecazione di run() su Thread con un suggerimento per utilizzare invece gli executors.È chiaramente impossibile proteggerlo ora. – gshx
- 1. Run Java EE applicazione su EC2
- 2. Thread Java: il metodo Run non può generare un'eccezione controllata
- 3. thread dedicato per io_service :: run()
- 4. thread start non chiama run
- 5. Vantaggi dell'astrazione e del polimorfismo in Java
- 6. Modificatore volatile Java e blocchi sincronizzati
- 7. Quali vantaggi ha Scala su Java per la programmazione simultanea?
- 8. Vantaggi del sovraccarico del costruttore
- 9. Vantaggi di Java Cloning
- 10. Arresto del thread di looping in Java
- 11. Vantaggi di Parcelable su JSON
- 12. Vantaggi dell'uso di classi wrapper su primitive in Java
- 13. Strumenti per monitorare l'esecuzione del thread java
- 14. Java - Chiama per avviare il metodo sul thread: come si dirige verso runnable dell'interfaccia run()?
- 15. Timer in Java Thread
- 16. Modificatore Ordine parole chiave in Java
- 17. Scopo del modificatore di visibilità interno in Kotlin
- 18. Distinguere tra thread Java e thread del sistema operativo?
- 19. thread state java
- 20. Running wait() su un'istanza di Thread da main() in Java
- 21. java: interruzione del thread assolutamente necessaria
- 22. Tracciamento della creazione e durata del thread Java
- 23. cosa fa un costruttore pubblico su una classe interna significa
- 24. std :: thread - denominazione del thread
- 25. Vantaggi di Tesla su GeForce
- 26. Modificatore asincrono in C#
- 27. Quali sono i vantaggi del nuovo supporto Java Heroku su Amazon Elastic Beanstalk
- 28. Una variabile che non è pubblico o privato-Java
- 29. Java: passaggio al thread principale?
- 30. Quali sono i vantaggi di Blocking Queue in Java?
Sì, hai ragione e penserei che sia per questo che run() è lì come metodo pubblico. Infatti, dal momento che c'è un costruttore che accetta un argomento Runnable - Thread pubblico (Target eseguibile), che avrebbe dovuto annullare la necessità di implementare Runnable? – gshx
"NON è consigliabile"? non il contrario? :-) –
grazie. un extra 'not' :) rimosso. – Bozho