java - 如何创建守护线程?为什么?

标签 java multithreading

我无法理解守护线程的用法和目的。

它们有什么用?我该如何使用它们? 另外,我尝试创建守护进程,但我做不到。

class Evil implements Runnable {
    public static void main(String[] arg) throws Exception {
        Thread t = new Thread(new Evil());
        t.start();
        Thread.sleep(1000);
        t.setDaemon(true);//no success, error!
    }

    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("How would it be Evil!?");
            Thread.sleep(1000);
        } catch (Exception e) {
        }
    }
}

这是我目前尝试过的,但它不能正常工作。

最佳答案

首先你需要在启动它之前将一个线程设置为守护进程,所以第一件事是这样的:

 Thread t = new Thread(new Evil());
 t.setDaemon(true);//success is here now
 t.start();
 Thread.sleep(1000);

守护线程和普通(用户)线程一样,但是有很大的不同。当没有用户线程存在( Activity )时,JVM 会杀死(停止)应用程序,换句话说,如果您有 1 个用户线程(例如主线程)和 1000 个守护线程,那么 JVM 会在您的应用程序中看到一个线程,并且它会在该主线程完成其工作后立即终止应用程序。

这些线程非常适合在后台处理或执行一些业务逻辑,直到其他用户线程处于 Activity 状态,并且要小心使用守护线程更改任何内容,因为在 JVM 停止线程之前没有任何信号。

所以在你的情况下,守护线程等待 1 秒并说些什么然后再次 hibernate 1 秒,因为这是守护进程,并且主线程在 1 秒后不再存在,那么守护线程永远不会到达第二个 sleep 线。

这个 (diagram)也可以帮助你。 from arashmd.blogspot.com

关于java - 如何创建守护线程?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421027/

相关文章:

java - RGB 到 CIELAB 转换

java - 如何从 corba idl 获取 JAVA 对象

multithreading - 划分工作,将任务分配给线程数组

java - Hibernate @Size validator

java - http服务器是否在verticle上运行并拥有自己的事件循环?

java - ExecutorService - 执行具有特定时间限制的每个任务

c++ - 管理多个并发线程

java - android中的索引越界异常

php - 在 Apache 上的 PHP 线程之间共享数据

java - 使用 JAVA 发送邮件