У меня есть форма Swing с кнопкой, которая при нажатии начинается с SocketServer
для прослушивания входящих запросов в отдельном потоке. Ниже приведена структура классов, которые у меня есть.Завершение выполнения Thread без использования метода stop()
MainForm
: Это мой основной класс, который запускает Swing Form. Он имеет две кнопки: «запустить сервер» и «кнопки остановки».MySocketServer
: Этот класс является таким, гдеSocketServer
объект существует, он имеет методыstartServer()
иstopServer()
.
следующее: Нажмите кнопку «Показать событие».
t = new Thread(new Runnable() //Object t is created globally in this main class.
{
public void run()
{
myss = new MySocketServer(); //Object myss has similar accessibility as t.
myss.startServer();
}
});
t.start();
И Ниже Стоп Нажмите на событие Body
myss.stopServer();
if(t.isAlive());
System.out.println("Thread is still alive!!");
Хотя я могу переключить SockeServer «старт» и «стоп» в мое время, я хочу, но я понимаю, что каждый раз я начинаю сервер, новый поток создается и остается активным, даже если сервер остановлен с использованием метода MySocketServer
.
я могу использовать stop()
из Thread
и остановить выполнение нити, но так как она амортизируется, и я изучал, что нити получают закончились, как только их метод run()
выполнил полностью, но я startServer()
метода разделен таким образом, что он может работать с подключенными клиентами отдельно ,
Пожалуйста, обратите внимание, что startServer()
имеет While-Listen петли, так что по существу run()
метод резьбы в бесконечном состоянии исполнения, пока явно не вызовет stopServer()
и остановить цикл.
что можно сделать здесь?
У меня есть булевский флаг, который используется в методе 'serverStart()', который проверяется на каждой итерации цикла, и я устанавливаю этот флаг в false в 'startServer()', в то время как отладка теперь я узнал, что while цикл заканчивается при вызове 'stopServer()', и даже метод 'run()' потока завершает свое выполнение элегантно, но почему я получаю 'isAlive()' true, даже если запуск завершен? – Kushal