`
lionlx
  • 浏览: 285864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java thread setDaemon的细节(转载)

阅读更多
  thread = new Thread(this);
thread.setDaemon(true);
thread.start();
当java虚拟机中没有非守护线程在运行的时候,java虚拟机会关闭。当所有常规线程运行完毕以后,守护线程不管运行到哪里,虚拟机都会退出运行。所以你的守护线程最好不要写一些会影响程序的业务逻辑。否则无法预料程序到底 会出现什么问题。



import java.io.IOException;
/*
* 守护线程在没有用户线程可服务时自动离开
* 在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。
* 这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。
* 将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。
* 典型的守护线程例子是JVM中的系统资源自动回收线程,
* 我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,
* 当我们的程序中不再有任何运行中的Thread,
* 程序就不会再产生垃圾,垃圾回收器也就无事可做,
* 所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。
* 它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
* 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
* 也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
* 那Java的守护线程是什么样子的呢。
* 当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;
* 如果还有一个或以上的非守护线程则JVM不会退出。
*/
public class testThread extends Thread {

public testThread() {
}
/** *//**
* 线程的run方法,它将和其他线程同时运行
*/
    public void run(){
for(int i = 1; i <= 100; i++){
try{
Thread.sleep(100);

} catch (InterruptedException ex){
ex.printStackTrace();
}
System.out.println(i);
}
}
public static void main(String [] args){
testThread test = new testThread();
test.setDaemon(true);
test.start();
System.out.println("isDaemon = " + test.isDaemon());
try {
System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    python使用Thread的setDaemon启动后台线程教程

    ### Python使用Thread的setDaemon启动后台线程教程 #### 一、引言 在Python的多线程编程中,线程可以根据其是否能在主线程退出时立即终止来分为前台线程(非守护线程)和后台线程(守护线程)。这种分类方式有助于...

    javaThread正确的示例.rar

    本示例“javaThread正确的示例”旨在展示如何正确地创建和管理Java线程,以提高程序的并发性能。下面将详细介绍相关知识点。 1. **线程的创建方式** - **实现Runnable接口**:这是最常见的创建线程的方式,只需...

    java Thread

    Java Thread 是Java编程语言中处理并发执行的基本单元,它允许程序在同一时间运行多个独立的执行流,从而实现多任务并行处理。在Java中,线程可以被理解为程序中的一个独立的执行路径,每个线程都有自己的程序计数器...

    java多线程thread实例

    `Thread`类是Java中的核心类,它允许我们创建并控制独立的执行线程。在这个实例中,我们将深入探讨如何使用`Thread`类创建和管理多线程。 1. **线程的基本概念** - **线程**:线程是程序执行的最小单元,一个进程...

    java Thread & synchronized & concurrent 线程、同步、并发

    在Java编程语言中,线程(Thread)、同步(synchronized)和并发(Concurrency)是核心概念,对于构建高效、可扩展的应用程序至关重要。线程允许程序同时执行多个任务,而同步是控制多个线程对共享资源的访问,以...

    JAVA最新面试资料-备战2023金三银四

    Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务,如果全 部的 User Thread 已经撤离,Daemon 没有可...

    java实现后台进程

    Java语言提供了Thread类,我们可以自定义Thread子类并重写run()方法,这样当线程启动时,就会执行run()中的代码。例如: ```java class BackgroundTask extends Thread { public void run() { // 后台任务代码 }...

    守护进程(java)

    在Java中,我们可以利用线程(Thread)来模仿守护进程的行为。线程是程序执行的最小单元,一个Java应用程序至少包含一个主线程。当主线程退出时,如果还有其他非守护线程在运行,JVM不会立即退出;反之,如果所有非...

    Java并发编程---Thread类

    ### Java并发编程——Thread类详解 #### 一、线程的状态 在Java并发编程中,了解线程的各种状态对于理解并正确使用`Thread`类至关重要。一个线程在其生命周期中可能会经历以下几种状态: 1. **创建(new)**:当一...

    java多线程Demo

    在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新的类,让它继承Thread类时,可以通过重写`run()`方法来定义线程执行的任务。然后创建该类的对象,并...

    java多线程例子

    在 Java 中,可以通过继承 Thread 类或实现 Runnable 接口来创建多线程。在第一个例子中,我们将继承 Thread 类来创建一个多线程类 TestThread。 ```java public class ThreadDemo { public static void main...

    java 多线程

    通过设置`Thread.setDaemon(true)`,可以将线程标记为守护线程。守护线程不阻止程序退出,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。 在学习Java多线程时,理解这些基本概念和机制至关重要。...

    java多线程的两种实现

    在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...

    Thread 线程 java编程 亲手测试了的

    在Java编程中,线程(Thread)是程序执行的基本单元,它允许程序同时执行多个任务。线程在多任务处理中扮演着至关重要的角色,尤其是在现代计算机系统中,多线程已经成为提高性能和效率的标准手段。`Thread`类是Java...

    JAVA100例之实例60 继承Thread实现多线程

    在本实例"JAVA100例之实例60 继承Thread实现多线程"中,我们将探讨如何通过继承Java内置的`Thread`类来创建并运行多个线程。 首先,让我们理解什么是线程。线程是程序中的执行流,每个线程都有自己的程序计数器、栈...

    Java并发基础.docx

    在Java中,可以通过继承`Thread`类来创建线程。重写`run()`方法,将任务逻辑放入其中。例如: ```java public class SimpleThread extends Thread { @Override public void run() { for (int i = 0; i ; i++) { ...

    Java多线程-Thread类的常用结构及线程优先级

    Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...

    java编程 线程的经典实用案例

    thread.setDaemon(true); thread.start(); ``` 8. 线程状态:Java的Thread类定义了线程的五种状态:新建、可运行、运行、阻塞和终止。了解这些状态有助于调试和优化多线程程序。 通过以上知识点,你可以更好地理解...

    java多线程的讲解和实战

    Java通过`Thread`类和`Runnable`接口来创建和管理线程。每个线程都有自己的生命周期,包括新建、就绪、运行、阻塞和结束五个状态。 2. **创建线程的方式**: - 继承`Thread`类:创建一个新的类,继承自`Thread`,...

Global site tag (gtag.js) - Google Analytics