Java如何正确退出线程
2017-09-29 16:13
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异常
测试方法:
* 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()); } 4000 } 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(); } }
相关文章推荐
- java如何正确停止一个线程
- Java中如何正确的终止线程
- java中如何使正在运行中的线程退出
- Java中如何优雅正确的终止线程
- java如何正确停止一个线程
- [java多线程]如何安全的退出线程
- java多线程开发 如何正确关闭线程
- 如何正确停止线程(JAVA)
- Java中如何正确的终止一个线程
- Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程
- Java中如何优雅正确的终止线程
- java如何正确停止一个线程
- Java 如何正确停止一个线程
- 关于java线程的一些特性 启动 中断 及如何退出
- c#无限循环线程如何正确退出
- 如何正确结束Java线程
- java中如何使正在运行中的线程退出
- 如何正确停止java中的线程
- Java中如何正确而优雅的终止运行中的线程
- 如何正确退出线程