简单理解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
主线程执行完毕...
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
。。。。。。。。。。。。。。。。。。。。。

当主线程销毁停止,非守护线程(用户线程)并没有结束,而是一直在执行,与主线程互不影响。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值