Java Thread ArrayList для запросов на стороне сервера - PullRequest
0 голосов
/ 16 февраля 2020

Я разрабатываю простой почтовый сервер, чтобы научиться использовать сокеты в 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());
        }

работает нормально.

Может кто-нибудь сказать мне, что происходит?

Спасибо! : -)

...