Java로 다중 스레드 서버 응용 프로그램을 작성하고 있습니다. 모든 것이 잘 작동하지만 약간의 문제가 있습니다. 들어오는 연결 요청을 수신하는 runnable을 중지 할 때 소켓은 계속 존재합니다. 그래서 내 질문은 : 실행 개체를 중지하고이 실행 개체에서 만든 모든 개체를 정리하려면 어떻게해야합니까?Java : 소켓으로 실행 가능한 개체 정리
스레드 정지 코드 : 당신은 명시 적으로의 close -method를 호출하여 ServerSocket의를 닫아야합니다
public class Worldwide implements Runnable {
Core core = Core.getInstance() ;
public Worldwide() {
}
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(port) ;
core.printToConsole("Server is online") ;
core.printToConsole ("listening on port :" + server.getLocalPort()) ;
while (core.getServerSate() == true) {
Socket client = server.accept() ;
Runnable tr = new ClientCommunication(client) ;
new Thread (tr).start() ;
}
}
catch(Exception e) {
core.printToConsole ("An error occured while going online") ;
e.printStackTrace() ;
}
}
감사합니다, 톰
'Thread.stop'을 사용하지 마십시오. 이 메소드는 더 이상 사용되지 않습니다. 대신에,'Thread.interrupt'를 사용하고 스레드의 인터럽트 된 상태에 대한 당신의 루프 로직을 기반으로하는 것이 가장 좋습니다. 인터럽트를 잡았을 때 인터럽트를 전파해야합니다. – mre
루프가 소켓 클라이언트 = server.accept();에서 멈추기 때문에 나는 저를 위해 작동하지 않는다는 것을 짐작한다; – tb96