• 004 守护线程


    一 . 概述

      守护线程是一种特殊的线程,其特殊性在于:

        [1]依赖于其他非守护线程,一旦整个程序中没有了其他类型的线程运行,那么守护线程自动终结.

        [2]运行的优先级别低,可以作一些系统级别的辅助行为.


     二 .创建一个守护线程.

      其实创建一个守护线程和一般的线程没有什么区别,只是在线程启动之前需要设置该线程为守护线程.

      例子:    

    Thread thread = new Thread() {
                @Override
                public void run() {
                    for(;;)
                        System.out.println(" I am is a daemon Thread ...");
                }
            };
            thread.setDaemon(true);
            thread.start();
            Thread.sleep(3000);
            System.out.println("end ....");

      创建一个守护线程只需要注意设置一个守护的属性就可以了.


    三. finally失效

    public class DaemonTest {
        
        private static class DaemonThread extends Thread{
            
            public DaemonThread() {
                this.setDaemon(true);
            }
            @Override
            public void run() {
                try {
                for(;;) {
                    System.out.println("thread is running.....");
                }
                }finally {
                    System.out.println("执行finally语句");
                }
            }
        }
        
        /**
         * @param args
         * @throws InterruptedException
         */
        public static void main(String[] args) throws InterruptedException {
            /**
             * 1.Daemon线程的父线程现在就是主线程,当主线终结的时候,daemon线程就终结掉了.
             * 2.在finally的语句未必会执行,daemon线程的特性优先级比finally的级别要高.
             */
            new DaemonThread().start();
            TimeUnit.SECONDS.sleep(1);
        }
        
    }

    运行上面的例子,我们发现daemon线程无法使用finally语句完成终结,因此对于一个daemon的资源回收问题,我们不应该改依赖这个语法来完成.

  • 相关阅读:
    HTML音频/视频DOM 参考手册
    HTML5 应用程序缓存 和 视频
    HTML 5 新的Input类型
    快速开发平台消息通知中心之短信发送
    设计模式之单例设计模式
    反射
    多线程之线程安全
    01-sql优化及索引
    多线程之线程状态
    shell/linux定时清理日志文件
  • 原文地址:https://www.cnblogs.com/trekxu/p/8995571.html
Copyright © 2020-2023  润新知