• setDaemon详解


    一、线程
    JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个IllegalThreadStateException异常。不能操作文件、数据库等资源,避免主线程关闭而未能关闭守护线程的资源,并且它会在任何时候甚至在一个操作的中间发生中断。
    二、优点及使用场景
    在主线程关闭后无需手动关闭守护线程,因为会自动关闭,避免了麻烦,Java垃圾回收线程就是一个典型的守护线程,简单粗暴的可以理解为所有为线程服务而不涉及资源的线程都能设置为守护线程。
    作者:梦里藍天
    来源:CSDN
    原文:https://blog.csdn.net/ren365880/article/details/80289532
    举个例子:

    public class Demo {
        public static void main(String[] args) {
            Thread thread = new Thread(() -> {
                while (true) {
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("----睡眠一秒-----");
                }
            });
            //默认为false,设置为false代表非守护线程,true为守护线程,守护线程在主方法结束时候结束
    //        thread.setDaemon(true);
            thread.start();
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("主线程over");
        }
    }
    

    thread.setDaemon(false);这个方法默认为false,当为false情况下,输出:
    在这里插入图片描述
    主方法执行完成并不会结束.
    thread.setDaemon(true);当为守护线程的时候,主方法结束,守护线程就会结束.
    在这里插入图片描述
    很好理解,具体使用的话,要自己看看了

    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    contentSize,contentOffset,contentInset整理
    UITableViewCell的移动
    怎么修改Xcode新项目或新文件最上面的Creat By XXX
    objc_setAssociatedObject 关联对象
    Python strip()方法
    Python函数中*args和**kwargs来传递变长参数的用法
    python闭包
    Grand Garden思维题
    Circles Inside a Square(几何题)
    Matrix Transformation(模拟)
  • 原文地址:https://www.cnblogs.com/javayida/p/13347037.html
Copyright © 2020-2023  润新知