当前位置: 代码网 > it编程>编程语言>Java > java中如何停止一个正在运行的线程

java中如何停止一个正在运行的线程

2025年01月09日 Java 我要评论
如何停止一个正在运行的线程1)设置标志位如果线程的run方法中执行的是一个重复执行的循环,可以提供一个标记来控制循环是否继续代码示例:public class fundemo02 { /**

如何停止一个正在运行的线程

1)设置标志位

如果线程的run方法中执行的是一个重复执行的循环,可以提供一个标记来控制循环是否继续

代码示例:

public class fundemo02 {

    /**
     * 练习2:设计一个线程:运行10秒后被终止(掌握线程的终止方法)
     * @param args
     */
    public static void main(string[] args)  throws exception{
        myrunable02 runnable = new myrunable02();
        new thread(runnable).start();
        thread.sleep(10000); // 主线程休眠10秒钟
        runnable.flag = false;
        system.out.println("main、  end ...");
    }
}

class myrunable02 implements runnable{

    boolean flag = true;

    @override
    public void run() {
        while(flag){
            try {
                thread.sleep(1000);
                system.out.println(new date());
            } catch (interruptedexception e) {
                e.printstacktrace();
            }
        }
        system.out.println(thread.currentthread().getname() + " 执行完成");
    }
}

2)利用中断标志位

在线程中有个中断的标志位,默认是false,当我们显示的调用 interrupted方法或者isinterrupted方法是会修改标志位为true。

我们可以利用此来中断运行的线程。

代码示例:

package com.bobo.fundemo;

public class fundemo07 extends thread{

    public static void main(string[] args) throws interruptedexception {
        thread t1 = new fundemo07();
        t1.start();
        thread.sleep(3000);
         t1.interrupt(); // 中断线程 将中断标志由false修改为了true
        // t1.stop(); // 直接就把线程给kill掉了
        system.out.println("main .... ");
    }

    @override
    public void run() {
        system.out.println(this.getname() + " start...");
        int i = 0 ;
        // thread.interrupted() 如果没有被中断 那么是false 如果显示的执行了interrupt 方法就会修改为 true
        while(!thread.interrupted()){
            system.out.println(this.getname() + " " + i);
            i++;
        }

        system.out.println(this.getname()+ " end .... ");

    }
}

3)利用interruptedexception异常

如果线程因为执行join(),sleep()或者wait()而进入阻塞状态,此时要想停止它,可以让他调用interrupt(),程序会抛出interruptedexception异常。

我们利用这个异常可以来终止线程。

package com.bobo;

public class fundemo08 extends thread{

    public static void main(string[] args) throws interruptedexception {
        thread t1 = new fundemo08();
        t1.start();
        thread.sleep(3000);
         t1.interrupt(); // 中断线程 将中断标志由false修改为了true
        // t1.stop(); // 直接就把线程给kill掉了
        system.out.println("main .... ");
    }

    @override
    public void run() {
        system.out.println(this.getname() + " start...");
        int i = 0 ;
        // thread.interrupted() 如果没有被中断 那么是false 如果显示的执行了interrupt 方法就会修改为 true
         while(!thread.interrupted()){
        //while(!thread.currentthread().isinterrupted()){
             try {
                 thread.sleep(10000);
             } catch (interruptedexception e) {
                 e.printstacktrace();
				 break;
             }
             system.out.println(this.getname() + " " + i);
            i++;
        }

        system.out.println(this.getname()+ " end .... ");

    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com