守护线程和中断线程

守护线程

	java中所有的线程分为两类, 一类是守护线程, 一类是非守护线程(又称为用户线程)。
当java中所有的用户线程结束后, 无论此时守护线程的代码是否执行完成,  都会被强行中止, 整个java程序结束。
后台线程
public final void setDaemon(boolean on)

Daemon 代码跟随下面这amn的代码执行,时间受“被保护 ”线程的运行时间所控制

public class Demo20 {

    public static void main(String[] args) throws InterruptedException {
        WuJiang dianWei = new WuJiang();
        dianWei.setName("典韦");
        dianWei.setDaemon(true);
        dianWei.start();

        WuJiang xiaHouDun = new WuJiang();
        xiaHouDun.setName("夏侯惇");
        xiaHouDun.setDaemon(true);
        xiaHouDun.start();

        ComputeThread aman = new ComputeThread();
        aman.setName("阿瞒");
        aman.start();
    }
}

(这两段代码相关)

class WuJiang extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 10;) {
            System.out.println(getName() + "正在战场上厮杀 -> " + (i + 1));
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


class ComputeThread extends Thread {
    @Override
    public void run() {
        long num=0;
        //100亿次for循环
        for (long i = 0; i < 10000000000L; i++) {
            num++;
        }
    }
}

输出结果
在这里插入图片描述

中断线程(重要)

public final void stop()  纯了解
public void interrupt()  /  public boolean isInterrupted()
Thread.sleep三种方法之一阻塞,此时调用该线程的interrupt()方法,那么该线程将抛出一个 InterruptedException中断异常(该线程必须事先预备好处理此异常)
stop法
 		WuJiang ziLong = new WuJiang();
        ziLong.setName("子龙");
        ziLong.start();

        TimeUnit.SECONDS.sleep(5);
        //主线程就是诸葛亮, 等待5s后, 让子龙收手佯装撤退
        System.out.println("子龙, 准备撤退");
        //不推荐使用, 单方面的中止
        ziLong.stop();
interrupt法
 		WuJiang ziLong = new WuJiang();
        ziLong.setName("子龙");
        ziLong.start();
        TimeUnit.SECONDS.sleep(5);
        ziLong.interrupt();
class WuJiang extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 10;) {
            System.out.println(getName() + "正在战场上厮杀 -> " + (i + 1));

            if (isInterrupted()) {
                System.out.println("我接收到撤退信号了, 撤");
                break;
            }
    }
}
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 保持连接(keepalive)守护线程通常用于保持客户端和服务器之间的长连接,防止连接因为长时间没有活动而被断开。这种守护线程会周期性地向服务器发送一些数据,以保持连接处于活跃状态。如果一定时间内没有收到服务器的响应,那么守护线程会尝试重新连接服务器,以确保连接的可靠性。在网络编程中,保持连接守护线程是非常常见的技术手段。 ### 回答2: Keepalive守护线程是一种用于维持程序运行的后台线程。它的作用是在主程序执行完成后,保持程序的持续运行,防止程序意外退出或异常终止。 Keepalive守护线程通常在程序启动时创建,并在主线程运行结束后继续运行。它会周期性地执行一些任务或监控程序的状态,以确保程序的正常运行。 它可以用于各种场景,例如网络服务器、定时任务、心跳检测等。在网络服务器中,Keepalive守护线程可以监控与客户端的连接是否正常,如果某个连接断开了或出现异常,它可以及时重新建立连接,确保服务不被中断。在定时任务中,Keepalive守护线程可以定时执行任务,即使主线程执行完成,也可以保证任务按时执行。在心跳检测中,Keepalive守护线程可以周期性地发送心跳包,以检测与其他设备或程序之间的连接是否正常。 Keepalive守护线程需要注意避免陷入无尽循环或过于频繁的执行任务,以免造成系统资源的浪费。同时,需要根据具体的应用场景和需求,合理设置它的执行间隔和任务内容,以达到平衡系统负载和保持程序稳定运行的目的。 总之,Keepalive守护线程是一种重要的后台线程,它能够帮助我们保持程序的持续运行,并监控和处理程序运行过程中的异常情况,提高程序的稳定性和可靠性。通过合理的设置和使用,我们可以更好地管理和控制我们的程序,提供良好的用户体验。 ### 回答3: keepalive守护线程是一种在计算机系统中常见的线程类型。它的主要作用是监控其他线程或进程的运行状态,并在发现某个线程或进程意外退出时重新启动它,以保持系统的稳定运行。 首先,keepalive守护线程通常会持续监测其他线程或进程的状态。这可以通过不断地查询它们的运行状态或通过接收其他线程或进程发送的心跳信号来实现。通过这种方式,keepalive线程可以实时地了解其他线程或进程的健康状态。 其次,当keepalive线程发现某个线程或进程意外退出时,它会立即采取相应的措施来重新启动它。这可以通过重新创建线程/进程实例或通过调用恢复操作来实现。这样做可以确保整个系统的持续运行,避免因单个线程或进程的异常退出而导致系统崩溃或失效。 值得注意的是,keepalive守护线程通常会在系统启动时自动启动,并作为一个后台线程在整个系统运行期间持续工作。它通常拥有更高的优先级,以确保及时监控和恢复其他线程或进程的运行状态。 总之,keepalive守护线程的出现是为了提高系统的可用性和稳定性。它通过持续监控和恢复其他线程或进程的运行状态,可以使系统在遭遇异常情况时能够及时作出响应,从而避免系统崩溃或失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值