zoukankan      html  css  js  c++  java
  • Java 多线程(四)之守护线程(Daemon)

    @

    定义

    Java 中有两种线程: 一种是用户线程(User Thread),一种是守护线程(Daemon Thread)。

    守护线程是一种特殊的线程, 它的特殊有“陪伴”的含义, 当线程中不存在非守护线程时, 则守护线程自动销毁。

    垃圾回收线程就是一种守护线程, 当线程中没有非守护线程了, 则垃圾回收线程就会自动销毁。

    因此, 守护线程的作用就是为其他非守护线程的线程服务, 当非守护线程不存在时, 其自然就没有存在的必要了。

    如何创建

    创建过程与一般的线程一样, 只需要在创建完之后调用如下函数即可:

    setDaemon(true);
    

    判断

    public final boolean isDaemon() {
        return daemon;
    }
    

    可以通过该函数判定一个线程是否为守护线程。

    注意事项

    函数setDaemon(true)必须在 start() 函数之前使用。

    如 setDaemon(true) 在 start() 之后, 就会抛异常。如下

    报错信息

    也就是说, 在线程运行之后, 其类型(守护与否)就已经确定了, 无法更改。

    守护线程中产生的线程也是守护线程;

    在 Thread 的 init() 函数中, 可以看到这么一句:

    this.daemon = parent.isDaemon();
    
    

    测试

    创建一个线程类

    class PrimeThread extends Thread {
    
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+" begin");
            try {
                int i = 0;
                while(true) {
                    Thread.sleep(500);
                    System.out.println("Current i = " + (i++));
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+" end");
        }
    }
    

    创建测试方法

    public static void main(String[] args) {
        PrimeThread primeThread = new PrimeThread();
        primeThread.setDaemon(true);
        primeThread.start();
    
        try {
            Thread.sleep(3000L);
            System.out.println("Main 函数准备结束了, 守护线程也机会停止, 不打印");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    
    }
    

    结果如下:

    运行结果

    结果中, Main 函数的线程结束后, primeThread 线程也随之结束了。

  • 相关阅读:
    Linux IPC udp/ip socket 编程
    Linux IPC tcp/ip socket 编程
    Linux IPC BSD socket编程基础
    Linux IPC POSIX 信号量
    Linux IPC POSIX 消息队列
    Linux IPC POSIX 共享内存
    Linux IPC System V 信号量
    Linux IPC System V 消息队列
    Linux IPC System V 共享内存
    ipcs, ipcrm
  • 原文地址:https://www.cnblogs.com/homejim/p/9557507.html
Copyright © 2011-2022 走看看