在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了,方法join()的作用是等待线程对象被销毁。
代码示例:
package com.test; public class TestJoin extends Thread { @Override public void run() { try { int secondValue = (int)(Math.random() * 10000); System.out.println(secondValue); Thread.sleep(secondValue); } catch (Exception e) { e.printStackTrace(); } } }
package com.test; public class Run { public static void main(String[] args) { try { TestJoin join = new TestJoin(); join.start(); join.join(); System.out.println("我想当线程对象执行完毕后我再执行"); } catch (Exception e) { e.printStackTrace(); } } }
运行结果: 7694 我相当线程对象执行完毕后我再执行
ps:如果把Run.java中的join.join()方法注释掉, 则会先打印 “我想当线程对象执行完毕后我再执行”
方法join与异常:
在join过程中,如果当前线程对象被中断,则当前线程出现异常。
join(long)中的参数是设定等待时间。
方法join(long)与sleep(long)的区别:
方法join(long)的功能个在内部是使用wait(long)方法来实现的,所以join(long)方法具有释放锁的特点。而Thread.sleep(long)方法却不释放锁.
原文地址:https://www.cnblogs.com/gouge/p/9118473.html
时间: 2024-10-22 04:02:45