如何正确退出线程

线程退出的方法有:

  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 block
			e.printStackTrace();
		}
		
	}


 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值