守护线程
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
会发现,当主线程结束以后,守护线程也随之结束
评论区
请写下您的评论...
猜你喜欢
blog
java线程池
java基础
3094
为什么用线程池:1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率2.线程并发数量过多,抢占系统资源从而导致阻塞3.对线程进行一些简单的管理
blog
线程的状态
java基础
3316
线程共包括以下5种状态。1.新建状态(New):线程对象被创建后,就进入了新建状态。例如,Threadthread=newThread()。2.就绪状态(Runnable):也被称为“可执行状态
blog
线程的同步问题
java基础
7610
多线程带来的问题:线程有时候回和其他线程共享一些资源,比如内存、数据库等。当多个线程同时读写同一份共享资源的时候,可能会发生冲突。这时候,我们就需要引入线程“同步”机制,即各位线程之间要有顺序使用
blog
线程之间的通讯
java基础
3285
1.什么是线程通信线程之间通信的两个基本问题是互斥和同步。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒
ofc
进程和线程的区别
weblog
1281
根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。包含关系:一个进程内可以有多个线程(默认有一个主线程),线程是进程的一部分,必须依赖于进程而存在,不能独立存在。资源共享:进程之间是不共享资源的,多个线程之间是共享资源的,所以存在资源竞争的问题。
blog
java启动线程的两种方式
java基础
4689
java启动线程的三种方式1.继承Thread类,重写run方法,调用start方法启动线程2.实现Runnable接口,重写run方法,调用start方法启动线程3.实现Callable接口代码如
ofc
线程的五种基本状态
official
1090
线程的五种基本状态:初始化、可运行、运行、阻塞、终止阻塞状态分为:等待阻塞、同步阻塞、其他阻塞三种方式等待阻塞:调用某锁对象的wait方法可使当前线程进入等待阻塞状态,并且该线程放弃所有资源(包括
ofc
线程的概念和多线程模型
official
1031
《操作系统》什么是线程,为什么要引入线程?还没引入进程之前,系统中各个程序只能串行执行。所以只能一个进程执行完才能执行另外一个进程。进入了进程的概念之后,多个进程之间可以并行执行,从而实现了用户在计
最新发表
归档
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
2024-08
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
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。