Вызов режима сна в цикле обычно приводит к снижению производительности.Например:
while (true) {
if (stream.available() > 0) {
// read input
}
sleep(MILLISECONDS);
}
Если MILLISECONDS слишком велик, то на этот код потребуется много времени, чтобы понять, что ввод доступен.
Если MILLISECONDS слишком мал, то этот код будет тратитьМногие системные ресурсы проверяют ввод, который еще не поступил.
Другие варианты использования sleep
в цикле, как правило, также сомнительны.Обычно есть лучший способ.
Если это проблема, что мне делать вместо этого?
Отправьте код, и, возможно, мы сможем дать вам разумный ответ.
РЕДАКТИРОВАТЬ
ИМО, лучший способ решить эту проблему - использовать ThreadPoolExecutor
.
Примерно так:
public void listen() {
BlockingQueue queue = new SynchronousQueue();
ThreadPoolExecutor executor = new ThreadPoolExecutor(
1, Session.getMaxSessionCount(), 100, TimeUnit.SECONDS, queue);
while (true) {
try {
queue.submit(new Session(database, serverSocket.accept()));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Это настраивает исполнителя в соответствии с тем, как работает ваш код.Есть много других способов сделать это;см. ссылку на Javadoc выше.