Java中线程分为两种类型:用户线程和守护线程。
通过Thread.setDaemon(false)设置为用户线程;
通过Thread.setDaemon(true)设置为守护线程;如果不设置属性,默认为用户线程。
用户线程和守护线程的区别:
1. 主线程结束后,用户线程还会继续运行,JVM 存活;主线程结束后,守护线程和JVM的状态由下面第2条确定。
2.如果没有用户线程,只有守护线程的话,那么JVM 就会结束。
守护线程:
定义:守护线程 -- 也称“服务线程”,在没有用户线程可服务时会自动离开;
优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务;
设置:通过setDaemon(true)来设置线程为“守护线程”;
实例: 垃圾回收线程就是一个经典的守护线程。当我们的程序中不再有任何运行的线程,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
Class TestThread extends Thread { // 永真循环线程 public void run() { for(int i=0;;i++){ try { Thread.sleep(1000); } catch (InterruptedException ex) { } System.out.println(i); } } public static void main(String [] args){ TestThread test = new TestThread(); // 调试时可以设置为false,那么这个程序是个死循环,没有退出条件。 test.setDaemon(true); test.start(); System.out.println("isDaemon = " + test.isDaemon()); try { // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束 System.in.read(); } catch (IOException ex) { } } }
http://blog.csdn.net/xyls12345/article/details/26256693
相关推荐
创建线程时,可以通过调用`Thread.setDaemon(true)`方法将其设置为守护线程,但这个操作必须在`Thread.start()`方法之前执行,因为一旦线程开始运行,它的守护状态就无法改变了。默认情况下,新创建的线程继承其父...
以下是一个简单的Java守护线程示例: ```java public class Test { public static void main(String[] args) { Thread t1 = new MyCommon(); // 非守护线程 Thread t2 = new Thread(new MyDaemon()); // 守护...
"Java守护线程与用户线程详解" Java中的线程可以分为守护线程(DaemonThread)和用户线程(UserThread)两类。守护线程和用户线程的唯一区别是它们对虚拟机的退出(程序的终止)的影响。 当JVM中只有守护线程时,虚拟机会...
创建守护线程的方法是调用`Thread.setDaemon(true)`方法,并且必须在线程启动之前设置。例如,在`Transformer.java`中,可能有这样的代码片段: ```java Thread transformerThread = new Thread(new Transformer())...
true 则把该线程设置为守护线程,反之则为用户线程。 Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务...
通过setDaemon(true)方法可以将线程设置为守护线程。 理解并熟练掌握Java多线程技术对于开发高效、稳定和响应迅速的应用程序至关重要。无论是处理并发任务、提高系统性能,还是实现复杂的并发控制,Java的多线程...
- **守护线程**:通过调用Thread.setDaemon(true)方法可将线程标记为守护线程。守护线程不会阻止程序的退出,只有当所有非守护线程结束后,JVM才会退出。 4. 线程组 - **线程组**:线程可以被组织到线程组中,...
调用`setDaemon(true)`可以在启动前将线程设置为守护线程。当所有用户线程结束时,守护线程也会自动结束。 9. 示例: - 生产者/消费者问题是线程同步的经典示例,通过wait()和notify()实现线程间的协作,保证数据...
Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. **线程同步与并发控制** Java提供了多种同步机制,如`synchronized`关键字、`java.util....
通过`setDaemon(true)`将线程设置为守护线程。 8. **死锁**: 当两个或更多线程相互等待对方释放资源而无法继续执行时,会发生死锁。避免死锁的关键是遵循正确的资源获取顺序。 9. **线程安全类**: Java提供了...
7. **守护线程**:通过`setDaemon(true)`可以将线程标记为守护线程。守护线程在所有非守护线程结束后会自动结束,常用于后台服务。 8. **线程池**:Java的`ExecutorService`和`ThreadPoolExecutor`允许创建线程池,...
要创建一个守护线程,需要在创建线程时调用`setDaemon(true)`方法,例如: ```java Thread daemonThread = new Thread(() -> { // 守护线程的代码 }); daemonThread.setDaemon(true); daemonThread.start(); ``` ...
我们可以使用`setDaemon(true)`方法将线程设置为守护线程。 6. 线程优先级: Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的...
创建守护线程可以通过在启动线程前调用`setDaemon(true)`方法实现。守护线程的特点是,当所有用户线程结束时,守护线程也会随之结束,其finally块可能不会执行。此外,守护线程创建的新线程也将是守护线程。 Java中...
通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`ThreadPoolExecutor`来管理和控制线程,线程池可以有效地复用线程,减少创建和销毁线程的开销,提高系统效率。常用...
通过设置`Thread.setDaemon(true)`,可以将线程标记为守护线程。守护线程不阻止程序退出,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。 在学习Java多线程时,理解这些基本概念和机制至关重要。...
- **守护线程**:`setDaemon(true)`将线程设置为守护线程,当所有非守护线程结束后,守护线程也会结束。 6. **并发协作**: - **生产者消费者模型**:使用阻塞队列(如`BlockingQueue`)实现线程间的通信和协作。...
在 Java 中,有两种类型的线程:前台线程(用户线程)和后台线程(守护线程)。前台线程是用户创建的线程,而后台线程是 JVM 创建的线程。后台线程具有特殊的性质,当所有的前台线程退出时,后台线程自动退出。 ```...