título bien lo dice, ¿cuál es la diferencia entre Executors.newSingleThreadExecutor().execute(command)
y new Thread(command).start();
La diferencia entre Executors.newSingleThreadExecutor(). Execute (command) y new Thread (command) .start();
Respuesta
Conductualmente, casi nada.
Sin embargo, una vez que tenga una instancia Executor
, puede enviar varias tareas a la misma y ejecutarlas una tras otra. No puedes hacer eso simplemente con un Thread
crudo.
Si un error o una RuntimeException es echada en el ejecutor que será absorbida en silencio, el nuevo hilo() lo imprimirá a System.err
Una diferencia notable, es cuando se ejecuta new Thread(someRunnable).start();
Una vez finalizada la ejecutable el hilo morirá silenciosamente.
El ejecutor persistirá hasta que lo apague. Ejecutando Executors.newSingleThreadExecutor().execute(command)
Cuando crea que su aplicación o la JVM pueden estar terminadas, el Ejecutor aún puede estar ejecutándose en una cadena de fondo.
Aparentemente no es el caso: https://www.farside.org.uk/201309/learning_from_bad_code – assylias
Interesante, no puedo discutir mucho de lo que dice. No puedo volver a crear la llamada 'finalize' después de que 'submit' finalice. Ejecuté una prueba simple 'principal' y la delegación de TPE nunca es GC'd. –
No lo he probado para ser honesto. – assylias
Executors.newSingleThreadExecutor(). Execute (comando) reutilizará thread construido previamente, no creará un nuevo hilo como en el caso de un nuevo Thread(). Si el hilo que no se ha usado durante sesenta segundos se termina, es un tipo de grupo que contiene un único hilo que hace su equivalente newFixedThreadPool (1).
Prefiero usar ExecutorService
o ThreadPoolExecutor
incluso para hilos de un solo dígito. Ofrecen más flexibilidad.
Tener un vistazo a ExecutorService
& ThreadPoolExecutor
secciones de preguntas relacionadas SE:
java Fork/Join pool, ExecutorService and CountDownLatch
Java's Fork/Join vs ExecutorService - when to use which?
supone que ha comenzado con su propio hilo en lugar de ExecutorService
. En el futuro, si existe la necesidad de admitir varios hilos, ExecutorService
o ThreadPoolExecutor
ofrecerán un mejor control y flexibilidad para usted. Puede ajustar el número requerido de parámetros en estas API a continuación.
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
- 1. Start-job vs. Invoke-command -asjob
- 2. CQRS intent command event
- 3. Diferencia entre BackgroundWorker y Thread?
- 4. ¿Cuál es la diferencia entre un Functor y el patrón Command?
- 5. ¿Cuál es la diferencia entre thread-aware y thread-safe?
- 6. Powershell -Command al borde múltiple
- 7. Ruby command-t SEGV
- 8. VS2008 Command Prompt + Cygwin
- 9. OSX su command issue
- 10. WPF Image Command Binding
- 11. C Basic Head Command
- 12. Bash Command Logger
- 13. Better windows command line shells
- 14. Linux find command gotcha?
- 15. Vim comma command keys
- 16. Command-T en emacs
- 17. Interfaces para Command Pattern en Java
- 18. The Command .. break; en Java, ¿y si?
- 19. Android run bash command en la aplicación
- 20. Diferencia entre 'File.Open()' y 'new FIleStream()'
- 21. thread start no ejecuta run
- 22. diferencia entre parameterizedThreadstart, Threadstart y Thread
- 23. Diferencia real entre AsyncTask y Thread
- 24. C# Command Run remote System
- 25. linux du command código fuente
- 26. Vim Command Line Escape Timeout
- 27. Usando MySQL Command Line Client
- 28. Command to Sleep Pantalla OSX
- 29. Java Command Line Jar Archivo
- 30. ¿Cuál es la diferencia entre new-itemproperty y set-itemproperty?
Oh sí, eso es, ni siquiera pensé en eso. Gracias. –