package Thread;
/*Java中的线程分为两类:一种是守护线程,一种是用户线程。
* 守护线程
*(首先主线程main和GC就是守护线程)
* 前面线程都结束以后,守护线程就结束
* 用户线程又称前台线程
*
它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。
守护线程是用来服务用户线程的,
通过在start()方法前调用 thread.setDaemon(true)可以把一个用户线程变成一个守护线程。
Java垃圾回收就是一个典型的守护线程。
一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc() 垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。其中,gc线程和异常处理线程都是守护线程。
* 若JVM中都是守护线程,当前JVM将退出。
* Demo泰坦尼克经典片段
*/
public class Demo3 {
public static void main(String[] args) {
Jack jack=new Jack();
Rose rose=new Rose();
rose.start();
//设置为守护线程 看对比 jack里面写的是一个死循环
//也就是说他一直在说你跳我就跳,但是没有执行
//当我们把他变成一个守护线程,当rose线程结束后
//jack自行结束线程
//jack.setDaemon(false);
//不是守护线程的输出
/*
* i jump you jump
啊。。。噗通
Rose you jump i jump
*/
jack.setDaemon(true);
//设置完守护线程后
/*
* Rose you jump i jump
啊。。。噗通
*/
jack.start();
}
}
class Jack extends Thread{
@Override
public void run() {
for (;; ) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Rose you jump i jump");
}
}
}
class Rose extends Thread{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" i jump you jump");
}
System.out.println("啊。。。噗通");
}
}
Edgar---Demo3
最新推荐文章于 2023-10-12 09:55:36 发布