`
youyu4
  • 浏览: 425476 次
社区版块
存档分类
最新评论

Java多线程之守护线程

 
阅读更多

Java多线程之守护线程

 

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) ;Daemon的作用是为其他线程的运行提供服务,比如说GC线程。其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开:如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。

 

 

守护线程注意地方

 

  1. 守护线程并非虚拟机内部可以提供,用户也可以自行的设定守护线程,方法:public final void setDaemon(boolean on)
  2. thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
  3. 在Daemon线程中产生的新线程也是Daemon的。
  4. 不是所有的应用都可以分配给Daemon线程来进行服务,比如读写操作或者计算逻辑,访问文件或数据库,这些动作比较慢。因为在Daemon Thread还没来的及进行操作时,虚拟机可能已经退出。

 

 

例子:完成文件输出的守护线程任务

class TestRunnable implements Runnable{  

    public void run(){  
        try{  
            Thread.sleep(1000);//守护线程阻塞1秒后运行  
            File f=new File("daemon.txt");  
            FileOutputStream os=new FileOutputStream(f,true);  
            os.write("daemon".getBytes());  
        } catch(IOException e1){  
            e1.printStackTrace();  
        } catch(InterruptedException e2){  
            e2.printStackTrace();  
        }  
    }  
}  

public class TestDemo2{  

    public static void main(String[] args) throws InterruptedException {  

        Runnable tr=new TestRunnable();  
        Thread thread=new Thread(tr);  
        thread.setDaemon(true); //设置守护线程  
        thread.start(); //开始执行分进程  
    }  
} 

 

运行结果:

      1. 文件daemon.txt中没有"daemon"字符串。

 

      2. 但是如果把thread.setDaemon(true); //设置守护线程注释掉,文件daemon.txt是可以被写入daemon字符串的

 

注意:JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态,因此,在使用后台线程候一定要注意这个问题。 

 

 

 

适用场景

 

web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。



 
 

 

 

  • 大小: 60 KB
分享到:
评论

相关推荐

    Java多线程编程总结

    Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程编程总结

    Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 ...

    java多线程笔记

    Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意以下四点 39 五、 关于同步和锁定的...

    Java多线程编程指南

    Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 ...

    Java多线程核心技术讲解

    Java多线程核心技术:理解多线程、在Java中实现多线程、线程的生命周期、线程的优先级、线程的同步、线程的阻塞、守护线程、线程组、线程池、总结。

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

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

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...

    Java 多线程编程面试集锦20道问题解答Java多线程编程高难度面试题及解析

    本篇文章提供了20道高难度的Java多线程编程面试题及详细解析,旨在帮助开发者展示出卓越的并发编程能力。在当今高并发的应用场景下,对多线程编程的理解和应用是评估面试者的重要指标。通过这些高难度问题,您将全面...

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

    主要介绍了java守护线程与非守护线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java多线程守护线程

     在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)  作用  Daemon的作用是为其他线程的运行提供便利服务,守护线程典型的应用是 GC (垃圾回收器),它是一个很称职的守护者。  区别  ...

    多线程执行指定名称方法 Java

    利用Java的反射机制,提供一个根据方法名执行指定方法的方式。

    谈谈Java中的守护线程与普通线程

    主要介绍了Java中的守护线程与普通线程,帮助大家更好的理解和学习Java 多线程,感兴趣的朋友可以了解下

    Java 多线程编程详解

    对线程的状态和同步,线程优先级,线程阻塞,守护线程。。。等做了详细介绍

    Java多线程详解

    文章目录1、进程与线程2、创建多线程2.1、继承Thread类2.2、实现Runnable接口2.3、使用匿名内部类实现2.4、实现Runnable接口的好处2.5、使用Callable和Future创建线程3、线程的生命周期4、几种特殊线程4.1、join线程...

    Java语言多线程终止中的守护线程实例

    主要介绍了Java语言多线程终止中的守护线程实例,具有一定借鉴价值,需要的朋友可以参考下

    简单了解Java编程中线程的创建与守护线程

    主要介绍了Java编程中线程的创建与守护线程,是Java多线程并发编程的基础,需要的朋友可以参考下

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm java -jar heshenboot.jar start|stop

Global site tag (gtag.js) - Google Analytics