Nuevo hilo varias veces

Quiero ejecutar un hilo cuando presiono un botón

public void ButtonClick(){ Thread thread = new Thread(){ public void run(){ Log.i("Test", "I'm in thread"); } }; thread.start(); } 

Mi pregunta es: Quiero hacer clic varias veces en este botón. ¿Hay varios hilos aún existentes después de que se imprima el mensaje "Estoy en el hilo"? O cada vez que se termina la función de ejecución, el hilo se destruye?

En caso de que crear varios hilos que se ejecutan al mismo tiempo, ¿cómo puedo cerrarlos de una manera limpia?

¡Gracias por tu ayuda!

¿Hay varios hilos aún existentes después de que se imprima el mensaje "Estoy en el hilo"?

No. Cada uno de ellos será destruido automáticamente.

En caso de que crear varios hilos que se ejecutan al mismo tiempo, ¿cómo puedo cerrarlos de una manera limpia?

No hay necesidad de detener los hilos, que serán destruidos automáticamente una vez que terminan su tarea (ejecución de ejecución ).

Para manejar la simultaneidad y la seguridad debe buscar en java.util.concurrent que es el marco de utilidad para manejar la simultaneidad en java.

¿Hay varios hilos aún existentes después de que se imprima el mensaje "Estoy en el hilo"? O cada vez que se termina la función de ejecución, el hilo se destruye?

En su caso, está creando muchos subprocesos desde que se crea un Thread para cada clic de botón.

La duración de Thread se ha terminado después de completar la última instrucción en el método run() . Después de run() método run() , el hilo entrará en el estado TERMINATED y no se puede volver a ejecutar.

Una mejor solución no es crear un nuevo Thread para cada clic de botón. Si necesita más subprocesos en su aplicación, vaya a un conjunto de subprocesos.

Java proporciona el marco de Executor para este propósito. Gestiona mejor el ciclo de vida del hilo.

Utilice una de las API, que devolverá ExecutorService de Executors

Por ejemplo newFixedThreadPool(4)

Echa un vistazo a este post y este artículo para obtener más opciones.

En caso de que crear varios hilos que se ejecutan al mismo tiempo, ¿cómo puedo cerrarlos de una manera limpia?

Usted puede apagar el ExecutorService como se cita debajo de SE post:

Cómo cerrar con firmeza java ExecutorService

Ya que está utilizando Android, tiene una alternativa más buena para multithreading: HandlerThread y Handler

Crear Thread everytime es una mala idea usar Thread Pool.

Crear una clase implementando Runnable en lugar de Anónimo … pasar un objeto ejecutable creando tantos threads como quierasDesde que crear objetos Runnable anónimo crea sólo un objeto limitándote así a cumplir tus requisitos. Compruebe el estado del subproceso antes de crear otro o cree un grupo de subprocesos (depreciado) o un grupo de subprocesos utilizando la simultaneidad que utilice callable en lugar de ejecutar y pasarlo al grupo de subprocesos de tamaño definido o puede convertir ejecutables a callable y luego pasarlo a la agrupación Tantas veces como quieras

 class Thop implements Runnable { public void run() { // operation } } 
  • Android - Async Tarea de comportamiento en 2.3.3 y 4.0 OS
  • RxJava No puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • Descargar el archivo hace que la interfaz de usuario gague
  • Cómo esperar el inicio de un subproceso en java
  • Cómo comprobar si se ejecuta en el hilo de la interfaz de usuario en Android?
  • Android: ejecuta código en intervalos regulares
  • Objeto no bloqueado por subproceso antes de notificar () en onPostExecute
  • ¿Los hilos se eliminan automáticamente después de que el método run () sale en Java?
  • ¿Una clase anónima mantiene referencias externas vivas?
  • ¿Cómo ejecutar la solicitud web en su propio hilo?
  • Lo que se mata con el hilo de la interfaz de usuario de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.