这个程序验证了后台线程与用户线程的区别以及之间的关系证明了只要所有的用户线程结束了那么后台线程就将必须结束!
import ncurrentTimeUnit;
public class Test {
public static void main(String[] args){
//将主线程的优先级设为最低优先执行main线程创建的线程
ThreadcurrentThread()setPriority(ThreadMIN_PRIORITY);
Thread myThread=new Thread(new Runnable(){
public void run(){
while(true)
{
Systemoutprintln(i will wait for you in shangling);
try {
TimeUnitMILLISECONDSsleep();
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
});
myThreadsetDaemon(true); //设置后台线程一定要写在start()方法的前面要不然是无效的
myThreadsetPriority(ThreadMAX_PRIORITY);
myThreadstart();
Thread userThread = new Thread(new Runnable(){
public void run(){
for(int i=;i<;i++)
Systemoutprintln(this is a user Thread);
}
});
userThreadsetPriority(ThreadMAX_PRIORITY);
userThreadstart();
Systemoutprintln(the main thread is end );
}
}
在上面的程序中就能体会到当用户线程都结束时虽然后台线程(幽灵线程)是一个死循环但是只要所有的用户线程都结束了那么系统就会自动停止要让后台线程执行得久一点只有一个方法那就是延长用户线程的运行时间例如在main()方法中添加sleep()方法进行延时
这里要注意一点不要利用sleep方法来精确计时由于这种方法是依赖操作系统的所以它的计时准确性是非常不可靠的当休眠时间过长时可能会产生意想不到的事情发生!