`

看一个守护线程的使用例子

 
阅读更多

 

package com.wjy.test;

import java.io.IOException;

public class ResponsiveUI extends Thread{
	private static volatile double d=1;
	public ResponsiveUI(){
		setDaemon(true);
		start();
	}
	public void run(){
		while(true){
			d=d+(Math.PI+Math.E)/d;
		}
	}

	public static void main(String args[]) {
		new ResponsiveUI();
		try {
			System.in.read();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(d);
	}

}

 程序说明,设置ResponsiveUI为守护线程(setDaemon(true);),在start之前设置。该线程在死循环中不停地重复。一旦用户通过System.in.read输入了数字,则死循环会第一时间计算出结果。最后由system.out打印出来。以上这个程序有点像——有响应的用户界面。

 

最后了解一下守护线程:

守护线程是为其他线程的运行提供便利的线程。守护线程不会阻止程序的终止。

Java的垃圾收集机制的某些实现就使用了守护线程。

非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程。

程序可以包含守护线程和非守护线程。

程序只有守护线程时,该程序便可以结束运行。

如果要使一个线程成为守护线程,则必须在调用它的start方法之前进行设置(通过以true作为参数调用线程的setDaemon方法,可以将该线程定义为一个守护线程),否则会抛出IllegalThreadStateException异常。如果线程是守护线程,则isDaemon方法返回真。

注:1、如果在线程已经启动后,再试图使该线程成为守护线程,则会导致IllegalThreadStateException异常

        2、事件调度线程是一个无穷循环的线程,而不是守护线程。因而,在基于窗口的应用程序调用System类的exit方法之前,事件调度线程不会终止。

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

 

 

分享到:
评论

相关推荐

    java 变形金刚中的守护神(守护线程)

    另一个示例是日志服务,日志系统通常使用守护线程来异步处理日志输出,这样不会阻塞用户线程,提高应用性能。如果所有用户线程都已结束,即使日志还在处理,守护线程也会随着JVM的退出而停止,不会导致应用程序无法...

    Java多线程的线程守护两个例子_.docx

    以下是一个简单的Java守护线程示例: ```java public class Test { public static void main(String[] args) { Thread t1 = new MyCommon(); // 非守护线程 Thread t2 = new Thread(new MyDaemon()); // 守护...

    多线程例子 演示多线程使用

    在计算机编程中,多线程是一种...这个“多线程例子.cpp”文件很可能是实现上述概念的一个具体实例,可能包括线程创建、同步、通信等操作。通过分析和学习这个例子,你可以更好地理解如何在实际项目中运用多线程技术。

    守护线程--源码--练手

    综上所述,这个压缩包中的"守护线程--源码--练手"项目提供了一个在Windows环境下实现非服务形式的守护线程示例,可以帮助开发者理解和实践Java守护线程的使用。通过阅读和分析源代码,我们可以学习到如何创建、设置...

    线程守护实例 远程线程 木马常用技术 VC6.0

    当被守护的线程结束时,守护线程会执行清理工作,确保资源的释放,防止内存泄漏。在Windows操作系统中,可以通过设置线程属性或者自定义线程间通信机制实现线程守护。 接下来,我们讨论远程线程。远程线程是在一个...

    JVM中的守护线程示例详解

    Java中可以使用`Thread.isDaemon()`方法来检查一个线程是否为守护线程。这个方法返回一个布尔值,如果线程是守护线程,则返回`true`,否则返回`false`。 示例代码演示: 下面的代码示例展示了如何创建和操作守护...

    【Java设计模式】守护线程模式

    - 守护线程模式的一个实际例子可以在拼车服务中看到。在这个系统中,乘客等待汽车可用,确保高效的资源使用,而无需不断检查。当乘客请求乘车时,请求会被暂停,直到有司机可用。系统会监控司机的可用性,一旦有...

    【java 多线程】守护线程与非守护线程的详解

    1. 垃圾回收线程:垃圾回收线程是一个典型的守护线程,它的作用是为其他前台线程提供服务,回收不再使用的对象。 2. 计时器线程:计时器线程可以设置为守护线程,以便在后台运行,提供计时服务。 代码示例: ```...

    浅谈java中守护线程与用户线程

    守护线程和用户线程的主要区别在于,当最后一个非守护线程结束时,JVM会正常退出,而不管当前是否有守护线程。 守护线程的创建可以通过设置线程的daemon参数为true来实现。例如: ```java public static void main...

    java 多线程示例

    本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要性,以及如何处理线程安全问题。 1. **线程的创建** Java提供了两种创建线程的...

    详解Java线程-守护线程与用户线程

    而当JVM中至少拥有一个用户线程时,JVM都不会退出。 守护线程的特点: 1. 守护线程是运行在程序后台的线程。 2. 守护线程创建的进程依然是守护进程。 3. 守护线程不会影响JVM的退出,当JVM只剩余守护进程时,JVM...

    什么是java的守护线程.pdf

    守护线程的一个典型例子是垃圾回收器(Garbage Collector),它默默地工作,确保内存资源的有效管理。 创建线程时,可以通过调用`Thread.setDaemon(true)`方法将其设置为守护线程,但这个操作必须在`Thread.start()...

    java多线程示例

    守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx”可能包含具体的示例...

    Java后台线程操作示例【守护线程】

    Java后台线程操作示例【守护线程】是Java多线程编程中的一种重要概念,主要介绍了Java后台线程操作的原理、操作技巧与使用注意事项。下面我们将详细介绍Java后台线程操作示例【守护线程】的知识点。 一、什么是后台...

    java两个线程互相守护

    在Java中,我们可以通过`Thread.setDaemon(true)`方法将一个线程设置为守护线程,该方法必须在线程启动前调用。例如: ```java Thread thread = new Thread(() -> { // 线程任务 }); thread.setDaemon(true); ...

    守护线程确保pushService

    这个文件名可能是项目的一个示例或者代码库,包含如何实现上述守护线程和保活服务的具体代码。在实际操作中,应该仔细研究这个示例,理解其工作原理并根据项目需求进行定制。 综上所述,"守护线程确保pushService...

    java多线程例子

    在上面的代码中,我们创建了一个名为 TestThread 的线程类,并将其设置为后台线程(守护线程)。然后,我们启动了该线程。在 main 方法中,我们不再有任何输出语句,因为后台线程自动退出。 第三个例子:线程 join...

    简单实现多线程同步示例(模拟购票系统)

    虽然此示例未涉及线程守护,但在实际应用中,我们可能还需要关注线程的生命周期管理,比如设置守护线程(daemon thread),使其在所有非守护线程结束时自动终止。 此外,对于更复杂的同步需求,Java的Lock接口提供...

    Java线程之守护线程(Daemon)用法实例

    下面是一个简单的示例,展示了如何创建和使用守护线程: ```java public class TestMain4 extends Thread { public TestMain4() { } public void run() { for(int i = 1; i ; i++){ try { Thread.sleep(100)...

    Java 守护线程,看这篇文章就对了! ( Daemon Thread )

    Java 的守护线程 Java 守护线程,看这篇文章就对了!Java 的守护线程什么是Java的守护线程( Daemon Thread )?守护线程的区别?守护线程的作用?守护线程如何创建?...任何一个守护线程都是整个JVM

Global site tag (gtag.js) - Google Analytics