public class ADaemon implements Runnable { @Override public void run() { try { System.out.println("Starting Daemon"); TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { System.out.println("exiting via InterruptedException"); } finally { System.out.println("This should always run?"); } } }
public static void main(String[] args) { ADaemonTest test = new ADaemonTest(); Thread t = new Thread(test.new ADaemon()); t.setDaemon(true); t.start();
}} 上面的执行结果是:Starting Daemon如果我们把 t.setDaemon(true); 注释掉,则运行结果为Starting Daemon This should always run?如果我们把 TimeUnit.MILLISECONDS.sleep(100); 改为 TimeUnit.MILLISECONDS.sleep(1);则运行结果为Starting Daemon This should always run?上面的三种执行情况及其记过说明两点: 1)非后台线程是会执行finally的 2. 后台线程可能会执行,也有可能不会执行finally子句,这说明finally子句不一定就会执行。 5)join 一个线程可以再其他线程上调用join()方法,其效果是等待一段时间直到第二个线程结束,才继续执行。 也可以再调用join()时带上一个超时参数(单位可以是毫秒,或者秒等),这样如果目标线程在这段时间到期时还没有结束,join()方法总能返回。 PS:我们可以在一个普通的方法中创建一个线程。当我们准备好运行线程时,就可以调用这个方法。而在线程开始之后(注意是start()之后,而非run()方法执行结束),该方法将返回。大话设计模式(带目录完整版) PDF+源代码 http://www.linuxidc.com/Linux/2014-08/105152.htmJava中介者设计模式 http://www.linuxidc.com/Linux/2014-07/104319.htmJava 设计模式之模板方法开发中应用 http://www.linuxidc.com/Linux/2014-07/104318.htm设计模式之 Java 中的单例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-10/107581.htm