守护线程会不会执行finally?默认情况new thread怎么样确定守护状态?

摘要:
“);});//已证明,默认情况下,newthread模式也是一个非守护程序线程//System.out.println;thread.setDemon;thread.start();System.out.prprintln;thread 2.setDaemon;hread2.start();thread.sleep;System.out.pintln;}}假守护程序线程2会尝试吗?守护程序线程2中的最后一个会执行吗?Tttrueexit结论:1。它证明了newthread模式继承了父线程。2.守护程序线程有时最终执行,有时不执行。并不是说守护程序线程不能最终执行。问题并非最终如此。问题是,当用户线程退出时,守护程序线程会随机退出,包括但不限于finally语句

finally throw return 中,线程的状态及interrupt 守护线程在退出的时候并不会执行finnaly块中的代码

线程池造成服务器内存泄漏 中所述,新建线程默认上使用建立线程时的当前线程所处的守护状态

本文予以验证:

package fin;

/**
 * Created by joyce on 2019/12/16.
 */
public class TestDaemonFinally {

    public static void main(String []f) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        /**
                         * 测试母线程守护,子线程?
                         */
                        Thread tt = new Thread(new Runnable() {
                            @Override
                            public void run() {

                            }
                        });
                        System.out.println("tt" + tt.isDaemon());
                        Thread.sleep(2000);
                        System.out.println("守护线程1的try会不会执行?");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } finally {
                    System.out.println("守护线程1的finally会不会执行?");
                }
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        System.out.println("守护线程2的try会不会执行?");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } finally {
                    System.out.println("守护线程2的finally会不会执行?");
                }
            }
        });

        // 证明new thread方式默认也是非守护线程
        //
        System.out.println(thread.isDaemon());
        thread.setDaemon(true);
        thread.start();

        System.out.println(thread2.isDaemon());
        thread2.setDaemon(true);
        thread2.start();

        Thread.sleep(1000);
        System.out.println("exit");
    }
}

false
false
守护线程2的try会不会执行?
守护线程2的finally会不会执行?
tttrue
exit

结论:

1 证明new thread方式,守护状态继承母线程

2 守护线程有时会执行finally,有时不会,并不是守护线程一定不会执行finally,问题不在于finally,问题在于守护

守护线程在用户线程退出时,随机退出,包括但不限于finally的语句都有可能不被执行

免责声明:文章转载自《守护线程会不会执行finally?默认情况new thread怎么样确定守护状态?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#学习笔记(3)——操作sqlserver数据库增删改查【转】Windows按键消息—虚拟键码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

堆栈信息分析

一、堆栈信息解读 2013-01-13 11:02:31 Full thread dump Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing): "[ThreadPool Manager] - Idle Thread" daemon prio=6 tid=0x069a3400 nid=0x84...

zabbix-agent安装

http://repo.zabbix.com/zabbix/3.2/ #官网下载 ftp://47.104.78.123/zabbix/zabbix-agent/linux/  #提供下载 安装zabbix-agent客户端  首先下载对应系统的版本包 [root@zbx source]# rpm -ivh zabbix-agent-3.2.0-1.el7...

Java回调实现异步 (转)

出处: Java回调实现异步   在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费。因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上,真正处理业务逻辑的时间很短很短,但是其他线程在线程池满了之后又会阻塞,等待前面的线程处理完成。而且,会出现一个奇怪的现象,客户端的请求被阻塞,但是cpu的...

java中终止线程的三种方式

在java中有三种方式可以终止线程。分别为:   1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。      2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。        3.  使用interrupt方法中断线程。 下面我们来详细的介绍这三种方...

17.异常(三)之 e.printStackTrace()介绍

一、关于printStackTrace()方法 public void printStackTrace()方法将此throwable对象的堆栈追踪输出至标准错误输出流,作为System.err的值。输出的第一行是此对象的toString()方法的结果,剩余行表示以前由方法 fillinStackTrace() 记录的数据。此信息的格式取决于实现,但以下示例...

C#学习笔记(34)——委托传值(回忆版)

说明(2018-4-6 20:31:03):  1. 昨天晚上看三层,看完第一天的最后一节,会员的修改和增加,感觉欲仙欲死,果断关机睡觉。 2. 上午搞了半天哈利波特的原版书epub的下载,结果都没发现一个排版能看的,就连多看卖的正版里面都是字体大小不一,遂决定先把爱丽丝看完再去寻找其他的。 3. 下午2点起床,开始对着电脑冥想,想那个窗体传值怎么弄的来着...