java join 方法的使用

Posted 狗哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java join 方法的使用相关的知识,希望对你有一定的参考价值。

在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到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)方法却不释放锁.

以上是关于java join 方法的使用的主要内容,如果未能解决你的问题,请参考以下文章

java join 方法的使用

path.join()和path.resolve()区别

Java多线程-join的使用

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

Java:join方法详解

node模块之path——path.join和path.resolve的区别