1. 守护线程
守护线程是比较特殊特殊的线程,能够自动结束生命周期的特性。
GC就是一个守护线程,如果主程序已经结束,但是GC还在运行
在游戏中,有多个线程,计算角色金钱,经验如果是是一个非守护线程的话,角色已经下线,而线程还在运行,经验,金钱不断增加,游戏会有很大的bug.
设置守护线程的方法为setDaemon(true),需要在线程启动前进行设置为守护线程。
例子:
package com.mxli.concurrent;
public class ConditionDemo {
public static void main(String[] args) throws InterruptedException {
Thread t=new Thread(){
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("守护线程");
}
};
t.setDaemon(false);
t.start();
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"finished");
}
}
运行结果为:
mainfinished
守护线程
如果t为非守护线程、则main线程退出后、则t还在执行
如果把t.setDaemon(true)后,
package com.mxli.concurrent;
public class ConditionDemo {
public static void main(String[] args) throws InterruptedException {
Thread t=new Thread(){
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("守护线程");
}
};
t.setDaemon(true);
t.start();
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"finished");
}
}
执行结果为:mainfinished
守护线程则不在输出,意味着主线程已经退出JVM,通过以上两个例子可以说明,守护线程能够结束生命周期的特性。