这一章节我们来讨论一下守护线程与非守护线程。

1.什么是守护线程?什么是非守护线程?

非守护线程:Java虚拟机在它全部非守护线程已经离开后自己主动离开。

守护线程:守护线程则是用来服务用户线程的,假设没有其它用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

2.同样点

大家都是线程。事实上能够互相切换

3.不同点:退出的时间点

退出的先后顺序:

非守护线程->守护线程->jvm

4.注意点:

(1)设置守护线程须要在start之前,否在抛异常

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
WritePaper writePaper = new WritePaper();
Thread thread = new Thread(writePaper);
thread.start();
thread.setDaemon(true);
}
} class WritePaper implements Runnable {
@Override
public void run() {
System.out.println("run");
}
}

输出:

run
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1275)
at com.ray.ch17.Test.main(Test.java:9)

(2)由于上面第三点所说的退出时间节点问题。因此会出现以下的情况

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
WritePaper writePaper = new WritePaper();
Thread thread = new Thread(writePaper);
thread.setDaemon(true);
thread.start();
}
} class WritePaper implements Runnable {
@Override
public void run() {
System.out.println("run");
}
}

输出:

(无)

事实上这里根本就没有运行对应的语句。由于守护线程知道如今没有须要服务的非守护线程(用户自己定义线程),就直接退出了。

假设想运行程序里面的输出。则不要设置守护:

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
WritePaper writePaper = new WritePaper();
Thread thread = new Thread(writePaper);
thread.start();
}
} class WritePaper implements Runnable {
@Override
public void run() {
System.out.println("run");
}
}

输出:

run

(3)守护线程与非守护线程事实上是没有本质差别,能够相互切换

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
WritePaper writePaper = new WritePaper();
Thread thread = new Thread(writePaper);
thread.setDaemon(true);
thread.setDaemon(false);
thread.start();
}
} class WritePaper implements Runnable {
@Override
public void run() {
System.out.println("run");
}
}

输出:

run

总结:这一章节主要介绍了守护线程与非守护线程的差别与联系。

这一章节就到这里,谢谢。

-----------------------------------

文件夹

从头认识java-18.2 主要的线程机制(5)-守护线程与非守护线程的更多相关文章

  1. JavaSE中线程与并行API框架学习笔记1——线程是什么?

    前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位 ...

  2. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...

  3. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

    目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+L ...

  4. swing线程机制

    在介绍swing线程机制之前,先介绍一些背景概念. 背景概念 同步与异步:     同步是指程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被阻塞(block)直到请求完成 ...

  5. WPF异常“调用线程无法访问此对象,因为另一个线程拥有该对象 ”

    WPF中在对界面进行操作的时候,可能会遇到"调用线程无法访问此对象,因为另一个线程拥有该对象"异常,这是因为WPF中只有UI线程才能操作UI元素,非UI线程要访问UI时就会报异常了 ...

  6. 线程机制、CLR线程池以及应用程序域

    最近在总结多线程.CLR线程池以及TPL编程实践,重读一遍CLR via C#,比刚上班的时候收获还是很大的.还得要多读书,读好书,同时要多总结,多实践,把技术研究透,使用好. 话不多说,直接上博文吧 ...

  7. python基础-守护进程、守护线程、守护非守护并行

    守护进程 1.守护子进程 主进程创建守护进程  其一:守护进程会在主进程代码执行结束后就终止  其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic pro ...

  8. Java高并发程序设计学习笔记(六):JDK并发包(线程池的基本使用、ForkJoin)

    转自:https://blog.csdn.net/dataiyangu/article/details/86573222 1. 线程池的基本使用1.1. 为什么需要线程池1.2. JDK为我们提供了哪 ...

  9. Java并发1——线程创建、启动、生命周期与线程控制

    内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...

  10. java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

随机推荐

  1. pic减法进位问题

    1.pic指令中subwf是 F - Wreg,且如果F>=Wreg,则C=1:如果F<Wreg,则C=0:这是由于pic的减法是加上减数的补码实现的.例如3-2,其实是3+FE=01,进 ...

  2. javascript中的正则示例

    // 方式一var obj_re = new RegExp("\d+","gi"); //g 全局,i 不区分大小写obj_re.test("fasf ...

  3. Python 计算相似度

    #计算相似度 #欧式距离 # npvec1, npvec2 = np.array(det_a), np.array(det_b) # similirity=math.sqrt(((npvec1 - n ...

  4. PHP通过DOM操作XML

    PHP XML操作类DOMDocument属性及方法 注意大小写一定不能弄错. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataT ...

  5. 洛谷 P4932 浏览器 (思维题)

    题目大意:给你一个序列,求满足$x_{i}\: xor\; x_{j}$在二进制下1的数量为奇数的数对数量 打月赛的时候真没想出来,还是我太弱.. xor意义下,对于两个数,假设它们两个每一位都是2个 ...

  6. [terry笔记]ogg_迁移同步实验_零停机

    oracle golden gate我最近正在琢磨,这个软件我觉得约等于dataguard的逻辑模式,我认为其最大的优势是更可控制,比如可以细化到某个schema.某个table的同步. 如下实验的主 ...

  7. hadoop-10-创建yum资源库

    hadoop-10-创建yum资源库 1,在/etc/yum.repos.d/下面创建 ambari.repo  HDP.repo  HDP-UTILS.repo 三个文件: [root@server ...

  8. Jquery控件jrumble

    <!DOCTYPE HTML> <html>  <head>   <title>demo.html</title>   <meta h ...

  9. IOS音频架构之Audio Unit

    在前面的章节部分我们已经对IOS音频结构有了一个清晰的认识,知道Audio Unit是位于整个音频结构的最底层,这一层非常多API已经開始和硬件打交道了.所以比較复杂,有了前面的基础再来看这个部分就比 ...

  10. mysql-面试题目1

    一.数据库的ACID 原子性(Atomicity):保证事务中的所有操作全部执行或全部不执行. 一致性(Consistency):保证数据库始终保持数据的一致性——事务操作之前和之后都是一致的. 隔离 ...