2014-10-16 5 views
0

Я пытаюсь использовать интерфейс Executor для создания эффективного пула потоков при создании новых потоков для TCP-соединений. Вот мой код:Как закрыть сокет при использовании интерфейса Executor?

ServerSocket server = new ServerSocket(20006); 
    Socket client = null; 
    Executor service = Executors.newCachedThreadPool(); 
    boolean f = true; 
    while(f){ 
     client = server.accept(); 
     System.out.println("Connection established!"); 
     service.execute(new ServerThread(client)); 
    } 

Мой вопрос, когда поток инактивируется и был удален из пула потоков, как я могу закрыть сокет?

ответ

0

передать ссылку сокета конструктору ServerThread, то на последней строке run() метода, вызовите socket.close():

public class ServerThread implements Runnable // or extends Thread 
{ 
    private Socket socket; 

    public ServerThread(Socket socket) 
    { 
     this.socket = socket; 
    } 

    @Override 
    public void run() 
    { 
     // ... 

     socket.close(); 
    } 
} 
Смежные вопросы