Nunca di el uso de Thread. He dormido mucho, hasta que descargué la última versión de Netbeans. Netbeans ahora te advierte que no uses Thread.Sleep. Así que investigué un poco sobre el tema y encontré personas que decían que solo necesitabas usar Thread.Sleep para depurar/probar y que si lo usabas en otro momento, tenías un código mal escrito.Cómo evitar el uso de Thread.Sleep
Así que mi pregunta es cómo puedo evitar el uso de Thread.Sleep en la siguiente situación.
He escrito una aplicación de servidor que se conecta con otra aplicación. El servidor tiene dos hilos:
maneja los datos que llegan a través del socket y devuelve otra información o acknoledgements simplemente.
Este es el hilo principal. Después de iniciar el zócalo, hágalo entrar en un ciclo indefinido. Dentro de este ciclo while, verifico para asegurarme de que el hilo del socket aún está activo y que el usuario no ha solicitado salir de la aplicación a través de la interfaz TrayIcon. Luego duermo y continúo este ciclo while.
Con esta aplicación, el TrayIcon es la única interfaz de usuario.
Aquí es el fragmento que estoy haciendo referencia:
// continues running as long as the exitth file is not present and
// the tray icon is not in a safe to exit status.
while(doNotExit())
{
if (getPrimaryThread() == null || !getPrimaryThread().isAlive())
resetsThreadAndSocket();
try
{
// check to see if the socket threads are still active, if not create new ones.
if ((getPrimaryThread() == null || !getPrimaryThread().isAlive()))
createSocketThread();
// check right before sleeping that the user does not want to exit.
if(getTrayIcon().isExiting())
break;
// puts the main Thread to sleep for 3 seconds
Thread.sleep(3000);
}
catch(SQLException ex)
{
_log.error(ex.getMessage(), ex);
restartDatabase();
}
}
¿Por qué necesitas dormir aquí en primer lugar? – Elalfer
Aquellos de nosotros que somos principiantes en el multihilo (incluyéndome a mí) nos preocupa quemar nuestros procesadores o causar problemas de vida. – Pete
No soy el motivo por el que está ejecutando el Thread.sleep() aquí tampoco. ¿Está tratando de protegerse contra el acceso a un recurso compartido (alguna estructura de datos u objeto)? –