background image

            e.printStackTrace();

        }

    }

}

   但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码

段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只

能解决跑出 InterruptedException 异常的阻塞。而 interrupt()并不是关闭阻塞线程,而

且解除阻塞。那这里就举出一个关闭线程阻塞的例子把:

1 public class BlockTask extends Thread { 

2     @Override 

3     public void run() { 

4         try { 

5             sleep(10000); 

6         } catch (InterruptedException e) { 

7             System.out.println("if yout use interrupt you will see me"); 

8         } 9         

10     }

11     public static void main(String[] args)throws Exception {

12         // TODO Auto-generated method stub

13         BlockTask task = new BlockTask();

14         task.start();

15         Thread.sleep(1000);

16         task.interrupt();

17       }

18 }

   ③上面说了, interrupt()只能解决 InterruptedException 的阻塞的线程,那么遇

到一些其他的 io 阻塞怎么处理呢?这个时候 java 都会提供相应的关闭阻塞的办法。例如,

服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主

机的响应,这个时候可以使用套接字 close()方法

1 public class SocketTask extends Thread { 

2     private volatile ServerSocket server;