- package daemonThread;
- /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false
- * 只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作
- * 当进程中不存在非守护线程,则守护线程随着JVM一同结束
- * GC(垃圾回收器)就是一个守护线程
- * 本例中main线程虽然先结束,但是testThread线程还在工作,所以只有当testThread线程也结束,才停止打印i */
- class MyThread extends Thread{
- private int i = 0;
- @Override
- public void run(){
- super.run();
- try{
- while(true){
- i++;
- System.out.println("i="+i);
- Thread.sleep(1000);
- }
- }catch(InterruptedException ie){
- ie.printStackTrace();
- }
- }
- }
- class testThread extends Thread{
- @Override
- public void run(){
- try{
- Thread.sleep(10000); //testThread线程约10秒后结束
- System.out.println(Thread.currentThread().getName()+"线程结束!");
- }catch(InterruptedException ie){
- ie.printStackTrace();
- }
- }
- }
- public class Run {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- try{
- MyThread thread = new MyThread();
- thread.setName("thread");
- thread.setDaemon(true); //将thread线程设为守护线程
- thread.start();
- testThread t = new testThread();
- t.setName("testThread");
- t.start();
- Thread.sleep(5000); //main线程在这里停留5秒
- System.out.println("主线程结束了");//5秒后main线程结束了,但是testThread线程还在执行,所以守护线程继续工作
- /*当所有线程都结束时,thread线程也随之结束*/
- }catch(InterruptedException ie){
- ie.printStackTrace();
- }
- }
- }
运行结果如下图