Извинения за неоднозначное название - я не мог подумать, как это сделать для названия.Серверное приложение: работает только с выходом println
В принципе, я играю с созданием простых серверных/клиентских программ на Java. Мой сервер запускает поток, чтобы постоянно проверять наличие новых подключений, а затем, если обнаружено соединение, он создает поток и объект соединения только для этого соединения.
Проблема возникает на потоке, который проверяет наличие новых соединений - это не сработало, пока я не начал проверку ошибок и когда я добавил в строке:
System.out.println("");
Он вдруг начал работать как надо , Удаление этой строки не приводит к добавлению новых потоков для соединений. Я предположил, что это обеспечило достаточную задержку для правильного запуска потока или чего-то еще, поэтому я некоторое время помещал цикл for, чтобы убедиться, что это сработало - но ничто другое не работало отдельно от одной простой строки.
Вот код для создания новых соединений темы:
class ThreadCreator implements Runnable {
ThreadCreator() {
}
public void run() {
while(true) {
System.out.println("WHY DOES THIS WORK??");
for(int i = 0; i < connections.size(); i++) {
if(connections.get(i).thread == false) {
Runnable ReadRunnable = new Read(connections.get(i));
Thread ReadThread = new Thread(ReadRunnable, "MWHAHAH");
ReadThread.setPriority(Thread.MAX_PRIORITY);
ReadThread.start();
connections.get(i).thread = true;
System.out.println("THREAD CREATED");
}
}
}
}
}
Я не могу себе представить, что может быть пойдет не так ..?
Одна из возможностей заключается в том, что без этой линии цикл работает так быстро, что он ест весь доступный процессор. Проверьте, чтобы заменить его 'sleep'. – SJuan76
Ваше право, я добавил в команду сна для потока, и это тоже работает - я не думаю, что это «есть весь процессор» - поскольку он подключается только к одному клиенту –
@KevinWatson, неважно, только один клиент ». Отсутствие оператора 'Thread.sleep()' приведет к тому, что цикл 'while' будет выполняться очень быстро. Попробуйте добавить счетчик внутри цикла 'while', и вы поймете, что я имею в виду. – BLuFeNiX