Создание потока за время l oop? - PullRequest
1 голос
/ 21 июня 2020

Итак, у меня есть сервер, который принимает соединения сокетов и запускает поток для каждого сокета для передачи данных и т. Д. c. Краткое резюме кода сервера:

ServerSocket ss = new SocketServer(7777);
while(true) {
    Socket socket = ss.accept();
    Runnable r = new aHandler(socket);
    new Thread(r).start();
}

Теперь у меня есть два вопроса, зная, что переменные уничтожаются после каждого l oop, жив ли поток после al oop? И если это так, то закрывается ли сокет после l oop или он все еще работает внутри потока?

Ответы [ 3 ]

0 голосов
/ 21 июня 2020

Правильно, если сервер принимает соединение, он может сразу же делегировать взаимодействие с клиентом новому потоку, таким образом принимая новые соединения. Установленные и делегированные потоку соединения будут плавно завершаться после закрытия.

Вы можете точно проверить этот сценарий, описанный в Java Учебнике здесь: https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html#later

и рабочий пример здесь:

Сервер, поддерживающий несколько клиентов: https://docs.oracle.com/javase/tutorial/displayCode.html?code=https: //docs.oracle.com/javase/tutorial/networking/sockets/examples/ KKMultiServer. java

Подключения для обработки потоков после его делегирования: https://docs.oracle.com/javase/tutorial/displayCode.html?code=https: //docs.oracle.com/javase/tutorial /networking/sockets/examples/KKMultiServerThread.java

Ура!

0 голосов
/ 21 июня 2020

Да, эти потоки были бы живы. Вращающийся поток фактически войдет в ваш метод выполнения и продолжит его выполнение.

0 голосов
/ 21 июня 2020

Да, и соединение сокета останется открытым, и поток продолжит работу. В такой ситуации работа потоков будет закрывать сама себя. В противном случае потоки будут занимать все больше и больше оперативной памяти, чем больше соединений вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...