简单理解JAVA中什么是守护线程,什么是非守护线程?
2019-02-18 22:32
92 查看
java中守护线程和非守护线程
什么是守护线程,什么是非守护线程?
java有两种状态的线程
1.守护线程(例如垃圾回收线程:gc线程)
2.非守护线程(用户线程:用户线程即我们手动创建的线程)
守护线程与非守护线程的区别
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 主线程执行完毕...我是子线程(用户线程) 我是子线程(用户线程) 我是子线程(用户线程) 我是子线程(用户线程) 我是子线程(用户线程) 我是子线程(用户线程) 。。。。。。。。。。。。。。。。。。。。。
当主线程销毁停止,非守护线程(用户线程)并没有结束,而是一直在执行,与主线程互不影响。
相关文章推荐
- java守护线程的理解
- 简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)
- 什么是java的守护线程
- 线程和线程池的理解与java简单例子
- java中精灵线程(Daemon)或守护线程和普通线程有什么区别
- java——简单理解线程
- 什么是java 的守护线程
- Java之线程安全的简单理解
- Java 一个简单的线程定时 (守护线程)
- Java之线程安全的简单理解
- 深入理解Java多线程学习笔记-守护线程
- java Daemon (守护)线程理解
- java——简单理解线程
- java学习Java编程:什么是守护线程?
- Java守护线程的理解笔记
- java 线程的简单理解
- Java守护线程的理解
- 简单的例子理解java线程的生命周期
- java守护线程理解
- Java "线程任务" 与 "线程" 概念的简单理解