Я разрабатываю простой почтовый сервер, чтобы научиться использовать сокеты в Java. Для обработки нескольких запросов я использую следующее решение:
while(true){
if(currentThread == -1){
currentThread++;
connectionThreads.add(new ConnectionThread(serverSocket));
connectionThreads.get(currentThread).setDaemon(true);
connectionThreads.get(currentThread).start();
System.out.println("STARTED thr " + currentThread);
}
if(connectionThreads.get(currentThread).isConnected()){
System.out.println("THREAD CONNECTED: Thr " + currentThread);
currentThread++;
connectionThreads.add(new ConnectionThread(serverSocket));
connectionThreads.get(currentThread).setDaemon(true);
connectionThreads.get(currentThread).start();
System.out.println("STARTED thr " + currentThread);
}
}
Где «currentThread» - целое число, connectionThreads - массив массивов клиентских сокетов, serverSocket - сокет сервера, с которым связаны все клиентские сокеты. Проблема в том, что, когда я подключаю клиентов к серверу, он хорошо работает для первого / второго потоков, затем застревает: вывод видео:
STARTED thr 0
THREAD CONNECTED: Thr 0
STARTED thr 1
, но, если я добавлю следующий оператор else:
while(true){
if(currentThread == -1){
currentThread++;
connectionThreads.add(new ConnectionThread(serverSocket));
connectionThreads.get(currentThread).setDaemon(true);
connectionThreads.get(currentThread).start();
System.out.println("STARTED thr " + currentThread);
}
if(connectionThreads.get(currentThread).isConnected()){
System.out.println("THREAD CONNECTED: Thr " + currentThread);
currentThread++;
connectionThreads.add(new ConnectionThread(serverSocket));
connectionThreads.get(currentThread).setDaemon(true);
connectionThreads.get(currentThread).start();
System.out.println("STARTED thr " + currentThread);
}else System.out.println(currentThread + " isConnected " + connectionThreads.get(currentThread).isConnected());
}
работает нормально.
Может кто-нибудь сказать мне, что происходит?
Спасибо! : -)