Java Threading Error IllegalThreadState hilo ya iniciado

Siempre que empiezo mi hilo siempre hago este cheque. No encontré en ninguna parte que llamé comienzo en el hilo sin hacer el cheque abajo

if (!myThread.isAlive()) myThread.start(); 

Sin embargo, termino con IllegalThreadStateException: Thread ya iniciado. Esto realmente se bloquea mi aplicación (android). Así que hay algún otro cheque que tengo que hacer antes de iniciar un hilo?

3 Solutions collect form web for “Java Threading Error IllegalThreadState hilo ya iniciado”

Debería comprobar si el hilo ya ha empezado a usar getState () e iniciarlo sólo si su estado es nuevo , de lo contrario, cree un nuevo hilo (si es necesario).

¿Creas una nueva instancia para la referencia de myThread usando new? Sólo puede ejecutar myThread.start () una vez en una sola instancia.

Comprobar si está vivo no es el camino correcto. Crear una nueva instancia.

Acabo de tener un caso similar aquí, por eso doy una respuesta tardía.

El problema es que la solución con Thread.isAlive() y Thread.start() no es multithread-safe. Puede ocurrir que un primer subproceso llame a su código, ejecute isAlive() y en algún lugar dentro de Thread.start() , después de que se inició el nuevo subproceso y antes de que cambie el estado, se produce un cambio de tarea y un segundo llamante ejecuta isAlive() cuando lo hace Es aún false haciendo así que start() sea ​​llamado dos veces. Para que sea peor en algún lugar dentro de start() parece que un switch de tarea es forzado y por lo tanto este problema aparece con bastante frecuencia.

Solución: Anule el start() para que sea multithread-safe, por ejemplo

 private final AtomicBoolean started = new AtomicBoolean(false); /* (non-Javadoc) * @see java.lang.Thread#start() */ @Override public synchronized void start() { if (!started.getAndSet(true)) { super.start(); } } 

Entonces su problema no aparecerá más, incluso si start() accidentalmente se llama dos veces.

  • Algoritmo de foto / imagen a esbozo
  • Volver a Actividad principal de la actividad arbitraria en la aplicación android
  • NullPointerException en android.support.v7.app.ActionBarImplICS.getThemedContext Android
  • Lista de activos en un subdirectorio utilizando AssetManager.list
  • "Error: no se puede encontrar la variable de símbolo xml" al intentar google analytics
  • ¿Cómo desactivo explícitamente el modo de flujo en bloque para las conexiones HTTP en Android?
  • Maven plugin para obfuscation código Java
  • 'Android-24' requiere JDK 1.8 o posterior para compilar
  • Cómo cambiar los elementos de ArrayList en Es duplicado sin afectar a la original?
  • Vida útil de una variable estática en Android
  • Establecer vínculo en Java-Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.