setDaemon的简单使用

//copyright©liupengcheng
//http://www.cnblogs.com/liupengcheng

/**
* Created by Administrator on 2014/10/23.
*
*
setDaemon
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。
该方法必须在启动线程前调用。

该方法首先调用该线程的 checkAccess 方法,且不带任何参数。这可能抛出 SecurityException(在当前线程中)。

参数:
on - 如果为 true,则将该线程标记为守护线程。
*/

//copyright©liupengcheng
//http://www.cnblogs.com/liupengcheng

public class ThreadDemo3 {
    public static void main(String [] args){
        TestThread1 tt = new TestThread1();
        Thread t = new Thread(tt);
        t.setDaemon(true);
        t.start();
    }
}

//copyright©liupengcheng
//http://www.cnblogs.com/liupengcheng


class TestThread1 implements Runnable{
    public void run()
    {
        while (true)
        {
            System.out.println(Thread.currentThread().getName()+"is running");
        }
    }

}

//copyright©liupengcheng
//http://www.cnblogs.com/liupengcheng

//输出结果为空,因为所有线程都为守护线程,Java 虚拟机退出

转载于:https://www.cnblogs.com/liupengcheng/p/4045886.html

### 回答1: 在 Python 的 threading 模块中,setDaemon() 是一个方法,用于设置线程守护。当一个线程启动以后,主线程不会等待它执行完毕再结束,而是直接退出,同时子线程也会随之结束。如果你希望子线程在主线程退出时也能够退出,就需要将子线程设置为守护线程。这时,当主线程结束时,守护线程也会随之结束。 setDaemon() 方法的使用非常简单,只需要在创建线程之后,在调用 start() 方法之前,调用 setDaemon(True) 方法即可将线程设置为守护线程。例如: ``` import threading def worker(): print('Worker start') while True: pass print('Worker end') t = threading.Thread(target=worker) t.setDaemon(True) t.start() print('Main thread end') ``` 在上面的代码中,我们创建了一个名为 worker 的函数,然后创建了一个线程 t,并将 worker 函数作为线程的目标函数。接着,我们调用了 t.setDaemon(True) 方法,将 t 线程设置为守护线程。最后,我们调用 t.start() 方法启动线程。在主线程中,我们只打印了一句话,然后就直接退出了。此时,worker 线程还在不停地执行,但是由于它是守护线程,所以在主线程退出时也会随之结束。 ### 回答2: 在Python中,threading 模块提供了一种创建和管理线程的方法。其中的 setDaemon() 方法是用来设置线程的“守护”属性的。 当一个线程被设置为守护线程时,意味着它的生命周期依赖于主线程的生命周期。当所有的非守护线程结束时,主线程也将退出,而无论守护线程是否完成。 设置线程的守护属性有两种方式:在创建线程时直接设置,或者通过 setDaemon() 方法来设置。 当创建线程时,可以将守护属性作为参数传递给 Thread 对象的构造函数,例如: ```python import threading # 创建一个线程,并设置守护属性为 True thread = threading.Thread(target=func, daemon=True) ``` 另一种方式是在创建线程后,使用 setDaemon() 方法来设置守护属性: ```python import threading thread = threading.Thread(target=func) # 设置线程的守护属性为 True thread.setDaemon(True) ``` 无论使用哪种方式,设置守护属性为 True 表示该线程是守护线程,设置为 False 表示该线程是非守护线程。当主线程结束时,守护线程会随之退出。 需要注意的是,一旦线程开始运行,就无法更改守护属性。如果将线程设置为守护线程后又尝试将它设置为非守护线程,将会触发 RuntimeError。 守护线程在一些需要后台运行的任务中非常有用,例如日志记录、定时任务等。通过设置守护属性,可以避免主线程等待守护线程结束而造成的程序阻塞。但要注意,当主线程结束时,守护线程可能还没有执行完,因此需要确保守护线程能够在合适的时间结束,以避免资源泄漏的问题。 ### 回答3: Python中的threading模块提供了线程管理的功能,其中一个常用的方法是setDaemon()方法。 setDaemon()方法是用来设置线程的“守护”属性。守护线程的特点是,当主线程结束时,即使守护线程尚未运行完毕,也会立即被终止。而非守护线程会等待守护线程结束后再终止。 setDaemon()方法接受一个布尔值作为参数,如果参数为True,则将线程设置为守护线程;如果参数为False,则将线程设置为非守护线程。默认情况下,线程被设置为非守护线程。 例如,我们创建一个守护线程: ```python import threading def my_func(): while True: print("守护线程运行中...") t = threading.Thread(target=my_func) t.setDaemon(True) t.start() ``` 在上面的例子中,我们创建了一个名为my_func的函数,并将该函数作为参数传递给Thread对象,创建了一个新线程t。接着,我们使用setDaemon(True)将线程t设置为守护线程,并通过t.start()方法启动线程。 当主线程结束时,无论守护线程的循环是否完成,守护线程将立即被终止。这就是守护线程的作用。 需要注意的是,对于已经启动的线程,不能再次修改其守护属性。此外,守护线程无法等待其他非守护线程的结束,因此通常在守护线程里不会进行一些较长时间的操作。 总结起来,setDaemon()方法用于设置线程的守护属性,将线程设置为守护线程后,在主线程结束时会立即终止该线程。这在某些场景下非常有用,可以帮助我们更好地管理线程的生命周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值