Java如何正确退出线程

线程退出的方法有:

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

    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值