后台线程 public final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程 对象名.setDaemon(true); // 设置守护线程 当正在运行的线程都是守护线程时,Java虚拟机退出。该方法必须在启动线程前调用。
坦克大战帮助理解守护线程,如下图所示:
示例代码如下:
1 package cn.itcast_04;
2
3 /*
4 * 后台线程
5 * public final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
6 * 当正在运行的线程都是守护线程时,Java虚拟机退出。 该方法必须在启动线程前调用。
7 *
8 * 帮助理解的守护线程的案例
9 * 游戏:坦克大战。
10 */
11 public class ThreadDaemonDemo {
12 public static void main(String[] args) {
13 ThreadDaemon td1 = new ThreadDaemon();
14 ThreadDaemon td2 = new ThreadDaemon();
15
16 td1.setName("关羽");
17 td2.setName("张飞");
18
19 // 设置守护线程,在启动线程前
20 td1.setDaemon(true);
21 td2.setDaemon(true);
22
23 td1.start();
24 td2.start();
25
26 Thread.currentThread().setName("刘备");
27 for (int x = 0; x < 5; x++) {
28 System.out.println(Thread.currentThread().getName() + ":" + x);
29 }
30 }
31 }
1 package cn.itcast_04;
2
3 public class ThreadDaemon extends Thread {
4 @Override
5 public void run() {
6 for (int x = 0; x < 100; x++) {
7 System.out.println(getName() + ":" + x);
8 }
9 }
10 }
程序运行的结果为:
(一种运行情况)
刘备:0
刘备:1
刘备:2
刘备:3
刘备:4
张飞:0
张飞:1
张飞:2
张飞:3
张飞:4
张飞:5
张飞:6
张飞:7
张飞:8
解释:刘备这个线程结束了(刘备阵亡了),关羽和张飞的线程也会立马结束,但是就算立马结束也需要一些时间缓冲!(即关羽和张飞抹脖子后也得抽搐几下才真正死了啊)