/** |
* Daemon(守护)线程 Daemon线程区别一般线程之处是: |
* 只有虚拟机中的用户线程(非Daimon线程)全部结束,Daemon线程就会立即结束,并且也不会调用finally里的语句。 |
* daemon线程所产生的所有线程都是daemon的 |
*/ |
public class Daemon { |
static class MainThread extends Thread { |
public void run() { |
System.out.println( "MainThread is daemon? " + this .isDaemon()); |
System.out.println( "MainThread begin!" ); |
// 启动子线程 |
Thread sub1 = new SubThread(); |
// sub1线程为守护线程 |
sub1.setDaemon( true ); |
sub1.start(); |
try { |
Thread.sleep( 1000 ); |
} catch (InterruptedException e) { |
e.printStackTrace(); |
} finally { |
System.out.println( "MainThread" + " finally" ); |
} |
System.out.println( "MainThread end!" ); |
} |
} |
static class SubThread extends Thread { |
public void run() { |
System.out.println( "SubThread is daemon? " + this .isDaemon()); |
System.out.println( "SubThread begin!" ); |
int i = 0 ; |
try { |
while (i < 10 ) { |
System.out.println( "SubThread " + i++); |
Thread.sleep( 200 ); |
} |
} catch (InterruptedException e) { |
e.printStackTrace(); |
} finally { |
System.out.println( "SubThread finally" ); |
} |
System.out.println( "SubThread end!" ); |
} |
} |
public static void main(String[] args) { |
System.out.println( "Main begin!" ); |
// 默认情况下mainThread是普通线程 |
Thread mainThread = new MainThread(); |
// 启动mainThread线程 |
mainThread.start(); |
try { |
Thread.sleep( 500 ); |
} catch (InterruptedException e1) { |
e1.printStackTrace(); |
} |
System.out.println( "Main end!" ); |
} |
} |