目录
-
什么是守护线程,什么是非守护线程? -
java有两种状态的线程 -
守护线程与非守护线程的区别 -
守护线程与非守护线程代码演示区别 -
创建守护线程 -
守护线程:主线程销毁停止,守护线程一起销毁 -
非守护线程:如果主线程销毁,用户线程继续运行且互不影响。
什么是守护线程,什么是非守护线程?
java有两种状态的线程
-
守护线程(例如垃圾回收线程:gc线程) -
非守护线程(用户线程:用户线程即我们手动创建的线程)
守护线程与非守护线程的区别
1.守护线程
-
有一个特征,例如当主线程运行的时候,垃圾回收线程一起运行。 -
当主线程销毁,会和主线程一起销毁。
2.非守护线程
-
如果主线程销毁,用户线程继续运行且互不影响。
守护线程与非守护线程代码演示区别
创建守护线程
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("我是子线程(用户线程)");
}
}
});
// 标识当前方法为守护线程,一定要在启动线程前设置为守护线程
t1.setDaemon(true);
t1.start();
必须在t1.start()
之前设置,你不能把正在运行的常规线程设置为守护线程,否则报IllegalThreadStateException
异常
守护线程:主线程销毁停止,守护线程一起销毁
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("我是子线程(用户线程)");
}
}
});
// 标识当前方法为守护线程,一定要在启动线程前设置为守护线程
t1.setDaemon(true);
//启动线程
t1.start();
//相当与主线程
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(300);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("main:i:" + i);
}
System.out.println("主线程执行完毕...");
}
以下为运行结果:
main:i:0
main:i:1
main:i:2
我是子线程(用户线程)
main:i:3
main:i:4
main:i:5
我是子线程(用户线程)
main:i:6
main:i:7
main:i:8
我是子线程(用户线程)
main:i:9
主线程执行完毕...
主线程结束之后并没有在继续运行守护线程,守护线程也跟着结束,一起销毁停止。
非守护线程:如果主线程销毁,用户线程继续运行且互不影响。
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("我是子线程(用户线程)");
}
}
});
//启动线程
t1.start();
//相当与主线程
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(300);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("main:i:" + i);
}
System.out.println("主线程执行完毕...");
}
以下为运行结果:
main:i:0
main:i:1
main:i:2
我是子线程(用户线程)
main:i:3
main:i:4
main:i:5
我是子线程(用户线程)
main:i:6
main:i:7
main:i:8
我是子线程(用户线程)
main:i:9
主线程执行完毕...
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
。。。。。。。。。。。。。。。。。。。。。
当主线程销毁停止,非守护线程(用户线程)并没有结束,而是一直在执行,与主线程互不影响。
来源:blog.csdn.net/yang2812098/article/details/87651721

与其在网上拼命找题? 不如马上关注我们~
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/9342.html