守护线程

硅谷探秘者 1614 0 0

Java分为两种线程:用户线程 守护线程

        所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。

        守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。

        将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点:

        (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。

        (2) 在Daemon线程中产生的新线程也是Daemon的。

        (3) 守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。


代码实例:

package threadTest.test3;
/**
 * 守护线程
 * @author LENOVO
 *
 */
public class ThreadTest implements Runnable{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<100;i++) {
			System.out.println(Thread.currentThread().getName()+i);
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
package threadTest.test3;


/**
 * 主线程
 * @author LENOVO
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Thread t=new Thread(new ThreadTest());
		t.setDaemon(true);
		t.start();
		for(int i=0;i<10;i++) {
			System.out.println(Thread.currentThread().getName()+i);
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
运行结果:
main0
Thread-00
main1
Thread-01
Thread-02
main2
main3
Thread-03
Thread-04
main4
Thread-05
main5
main6
Thread-06
Thread-07
main7
main8
Thread-08
main9
Thread-09

会发现,当主线程结束以后,守护线程也随之结束


评论区
请写下您的评论...
暂无评论...
猜你喜欢
java基础 2833 为什么用线池:1.创建/销毁线伴随着系统开销,过于频繁的创建/销毁线,会很大度上影响处理效率2.线并发数量过多,抢占系统资源从而导致阻塞3.对线进行一些简单的管理
java基础 2657 线共包括以下5种状态。1.新建状态(New):线对象被创建后,就进入了新建状态。例如,Threadthread=newThread()。2.就绪状态(Runnable):也被称为“可执行状态
java基础 7264 线带来的问题:线有时候回和其他线共享一些资源,比如内存、数据库等。当多个线同时读写同一份共享资源的时候,可能会发生冲突。这时候,我们就需要引入线“同步”机制,即各位线之间要有顺序使用
java基础 2970 1.什么是线通信线之间通信的两个基本问题是互斥和同步。线同步是指线之间所具有的一种制约关系,一个线的执行依赖另一个线的消息,当它没有得到另一个线的消息时应等待,直到消息到达时才被唤醒
weblog 1008 根本区别:进是操作系统资源分配的基本单位,而线是处理器任务调度和执行的基本单位。包含关系:一个进内可以有多个线(默认有一个主线),线是进的一部分,必须依赖于进而存在,不能独立存在。资源共享:进之间是不共享资源的,多个线之间是共享资源的,所以存在资源竞争的问题。
java基础 4393 java启动线的三种方式1.继承Thread类,重写run方法,调用start方法启动线2.实现Runnable接口,重写run方法,调用start方法启动线3.实现Callable接口代码如
official 818 线的五种基本状态:初始化、可运行、运行、阻塞、终止阻塞状态分为:等待阻塞、同步阻塞、其他阻塞三种方式等待阻塞:调用某锁对象的wait方法可使当前线进入等待阻塞状态,并且该线放弃所有资源(包括
official 781 《操作系统》什么是线,为什么要引入线?还没引入进之前,系统中各个序只能串行执行。所以只能一个进执行完才能执行另外一个进。进入了进的概念之后,多个进之间可以并行执行,从而实现了用户在计
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。