• 终止线程的方式


    1、正常运行结束

    2、使用退出标志退出

      使用java关键字:volatile

    public class ThreadSafe extends Thread { 
        public volatile boolean exit = false;  
            public void run() {  
            while (!exit){ 
                //do something 
            } 
        }  
    } 
    

      

    3、Interrupt方法结束线程  

      线程未处于阻塞状态:使用isInterrupted()判断线程的中断标志来退出循环。当使用 interrupt()方法时,中断标志就会置true

     public class ThreadSafe extends Thread {    
         public void run() {          
            while (!isInterrupted()){ //非阻塞过程中通过判断中断标志来退出            
                 try{ 
                    Thread.sleep(5*1000);//阻塞过程捕获中断异常来退出 
                }catch(InterruptedException e){ 
                    e.printStackTrace(); 
                    break;//捕获到异常之后,执行break跳出循环 
                } 
            } 
        }  
    }                
    

       线程处于阻塞状态:

        如使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时, 会使线程处于阻塞状态。当调用线程的 interrupt()方法时,会抛出 InterruptException 异常。

        阻塞中的那个方法抛出这个异常,通过代码捕获该异常,然后 break 跳出循环状态,从而让 我们有机会结束这个线程的执行。

        通常很多人认为只要调用 interrupt 方法线程就会结束,实 际上是错的, 一定要先捕获InterruptedException异常之后通过break来跳出循环,才能正 常结束run方法

    4、stop方法终止线程(不建议,容易造成“死锁”)

  • 相关阅读:
    【onenet-edp传输】1、调试上报数据点和端对端透传
    【PYQT5快速开发】重定义边框、QSS美化皮肤主题
    MySQL
    Flask-Login一个账号单用户在线
    DataTable按钮,排序,单元格颜色
    python
    MegaCli64 raid对应关系
    openstack server status
    js中使用JSON.parse转换json
    linux使用pyodbc和freetds连接sqlserver
  • 原文地址:https://www.cnblogs.com/2328322824chx/p/13610673.html
Copyright © 2020-2023  润新知