程序不应依赖于虚拟机的finalize()方法来自动回收Socket资源,而需要手动在finally代码块中做Socket资源的释放操作。

    例如:下面代码片段中,使用完之前创建的socket套接字资源后,在finally代码块中进行了释放。

    1. public void getSocket(String host,int port){
    2. Socket socket = null;
    3. try {
    4. socket = new Socket(host,port);
    5. BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    6. while(reader.readLine()!=null){
    7. ...
    8. }
    9. } catch (UnknownHostException e) {
    10. e.printStackTrace();
    11. } catch (IOException e) {
    12. e.printStackTrace();
    13. }finally{
    14. if(socket!=null){
    15. try {
    16. socket.close();
    17. } catch (IOException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }
    22. }