java多线程(三)----线程的结束

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();

}

}

 

posted @ 2015-08-25 00:26  败八  阅读(251)  评论(0编辑  收藏  举报