您的位置:首页 > 其它

如何正确退出线程

2016-01-17 12:00 411 查看
线程退出的方法有:  1.使用共享变量(shared variable)发出信号,让线程自己退出。    该方法,它给予线程机会进行必要的清理工作,符合线程安全,可以使用。2.使用强制退出方法--Thread.stop();3.使用状态+Interrupt().使用 Thread.Interrupt()或者套接字的close()方法,抛出异常InterruptedException,然后置位退出标志。该方法,符合线程安全,根据阻塞情况分两种情况,(1)Object.wait,Thread.join和Thread.sleep三种方法之一阻塞。则调用 Thread.Interrupt(),抛出抛出异常InterruptedException异常,如果线程没有被阻塞,这时调用interrupt()将不起作用(2)如果是线程在I/O操作进行时被阻塞,如socket.connect(),socket.receive() 等等,则需要调用 socket.close(),方法,抛出SocketException异常
package test;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class MyThread extends Thread {
private boolean isStop;
private Socket mysocket;
private DataInputStream dis;
private InetSocketAddress isa;// = ;

public MyThread( Socket mysocket,InetSocketAddress isa ){
this.mysocket=mysocket;
this.isa=isa;
}
@Override
public void run() {
System.out.print("测试线程启动\n");
while (!isStop) {
try {
if (dis!=null) {
int size=dis.available();
}
mysocket.connect(this.isa,18000);//18s 超时
sleep(11000);

} catch (IOException eo) {
//mysocket.close()  引起的异常
System.out.print("\nIOException:"+eo.toString());
}catch (InterruptedException e){	//Thread.interrupt()  引起的异常
System.out.print("\n中断异常"+e.toString());
isStop=true;
break;
}catch (Exception e){
// Exception  包含了上面两种异常	 IOException 和InterruptedException
System.out.print("\n其他异常"+e.toString());
}
}
System.out.print("\n测试线程结束\n");
}
}
测试方法:
<pre name="code" class="java">public static void main(String [] arges){Socket mysocket =new Socket ();System.out.print("hello word!\n");MyThread  thread=new MyThread(mysocket,new InetSocketAddress("192.168.1.1",1002));thread.start();try {Thread.sleep( 13000 );} catch (InterruptedException e) {}/* 测试一*///	thread.interrupt();/* 测试二*/try {mysocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: