En NetBeans, hay una nueva sugerencia que dice: Thread.sleep llamado en bucle.NetBeans/Java/Nueva pista: Thread.sleep llamado en el bucle
Pregunta 1: ¿Cómo/cuándo puede ser un problema dormir en un bucle?
Pregunta 2: Si es un problema, ¿qué debo hacer en su lugar?
ACTUALIZACIÓN: Pregunta 3: Aquí hay algunos códigos. Dime en este caso si debería usar algo más en lugar de Thread.Sleep en un bucle. En resumen, esto es utilizado por un servidor que escucha las conexiones TCP del cliente. La suspensión se usa aquí en caso de que se alcance el número máximo de sesiones con los clientes. En esta situación, quiero que la aplicación espere hasta que esté disponible una sesión gratuita.
public class SessionManager {
private static final int DEFAULT_PORT = 7500;
private static final int SLEEP_TIME = 200;
private final DatabaseManager database = new DatabaseManager();
private final ServerSocket serverSocket = new ServerSocket(DEFAULT_PORT);
public SessionManager() throws IOException, SQLException
{
}
public void listen()
{
while (true)
if (Session.getSessionCount() < Session.getMaxSessionCount())
try
{
new Thread(new Session(database, serverSocket.accept())).start();
}
catch (IOException ex) { ex.printStackTrace(); }
else
try
{
Thread.sleep(SLEEP_TIME);
}
catch (InterruptedException ex) { ex.printStackTrace(); }
}
public static void main(String[] args) throws IOException, SQLException
{
new SessionManager().listen();
}
}
¿Qué tal un java.util.Timer y TimerTask periódico? – Core
@ Core: depende de cómo lo use. Si solo lo usa para implementar el equivalente de 'sleep()', tiene los mismos problemas que con 'sleep()'. –
¿y si usamos managedexecutorservice? – wib