Как правильно использовать runnable для запуска многопоточного клиентского сокета в Java?

#java #multithreading #sockets #client

#java #многопоточность #сокеты #клиент

Вопрос:

Я пытаюсь запустить новое клиентское соединение в моей программе TCP P2P. Я хочу запускать каждое новое соединение с runnable.

Я не уверен, в чем проблема. Программа не ломается или что-то в этом роде. Это похоже на то, что он просто игнорирует код для запуска потока.

обновление Следующий код подключается, но немедленно завершает программу.

                 Thread clientThread = new Thread(){
                    public void run(){
                       try {
                            Socket socketClient = new Socket(ip, yPort);
                        } catch(Exception ec){
                            System.out.println("error"   ec);
                        } 
                    }
                };
                
                clientThread.start();
                System.out.println("connected to "   portName);
  

Комментарии:

1. Вы не запускаете поток. Вы создаете анонимный экземпляр Runnable интерфейса, ничего больше. Вам нужно сделать что-то вроде new Thread(thread).start();

2. Спасибо! Я перейду к этому сейчас.

3. Это то, что вы имели в виду?

4. Не совсем, но это должно сработать. Так ли это?

5. Он подключается. В примере, который я нашел в Интернете, не было ‘;’ после последней скобки, но без нее у меня бы не получилось, поэтому я просто хотел убедиться.

Ответ №1:

Проблема в том, что вы просто подключаетесь внутри потока, а затем ничего не нужно делать, поэтому процесс jvm завершается, и тогда все сокеты и выделенная память будут свободны!