java中的Thread类的join
程序员文章站
2022-07-12 18:33:54
...
join是Thread的实例方法,官方解释为:等待该线程终止。
其作用就是将调用join的线程优先执行,当前正在执行的线程阻塞,直到调用join方法的线程执行完毕或者被打断,主要用于线程之间的交互。
还有两个重载的方法:
1、join(long millis),等待该线程终止的时间最长为 millis 毫秒。为 0 意味着要一直等下去。
2、join(long millis, int nanos),等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
下面以几个例子说明:
例1:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); taskD.start(); try { hread.sleep(2000); System.out.println("taskD join,主线程等待."); /* * 此处如果taskD没有join,那么主线程会优先执行完毕,taskD在未执行完毕时中断。 * join之后,主线程等待线程taskD执行完毕再执行 */ taskD.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
例2:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); TaskE taskE = new TaskE(taskD); try { taskD.start(); Thread.sleep(2000); taskE.start(); /* * 此处taskE join,主线程等待, * 在taskE执行时,taskD join,所以 最有的执行优先级时taskD,taskE,主线程 */ taskE.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
例3:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); TaskE taskE = new TaskE(taskD); try { taskD.start(); Thread.sleep(2000); taskE.start(); /* * 此处taskE不进行 join,主线程不等待, * 在taskE执行时,taskD join, taskE等待taskD执行完毕再执行 * 但由于主线程没有阻塞,优先taskD和taskE执行完毕,所以taskD和taskE被中断。 */ //System.out.println("taskE join,主线程等待."); //taskE.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
上一篇: Nano Framework之使用Mybatis进行持久层开发
下一篇: Mybatis初探