1.使用volatile 标示位,在线程类中定义标示位,并提供相应的外部结束方法,在需要结束的时候调用该方法。
public class Task extends Thread { private volatile boolean flag= true; public void stopTask() { flag = false; } @Override public void run() { while(flag){ /* do your no-block task */ } } }
2、遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法
public class SocketTask extends Thread { private volatile ServerSocket server; public void stopTask(){ try { if(server!=null){ server.close(); System.out.println("close task successed"); } } catch (IOException e) { System.out.println("close task failded"); } } @Override public void run() { try { server = new ServerSocket(3333); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { SocketTask task = new SocketTask(); task.start(); Thread.sleep(1000); task.stopTask(); } }