相关文章推荐
讲道义的匕首  ·  excel vba 数据分析 - ...·  1 年前    · 
不拘小节的口罩  ·  ext js checkbox ...·  1 年前    · 
好帅的铁链  ·  css3 - CSS3 flex ...·  1 年前    · 

thread.join()的作用是让当前线程等待线程thread终止。当前线程在join的过程中,如果被interrupt了,则join()方法抛出InterruptedException。

当调用join()方法,当前线程进入无限期的阻塞,join所属的线程正常执行它的target上的任务,等其销毁后,当前线程继续往后执行。

join具有使线程排队运行的作用,有些类似于同步运行的效果。join和synchronized的区别是:join在内部使用wait方法进行等待,而synchronized关键字使用的是"对象监视器"原理进行同步。

join(long)可以设置至多等待多长时间。

join的实现如下,它调用了join(0):

public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;
        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        if (millis == 0) {
            while (isAlive()) {
                wait(0);
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                wait(delay);
                now = System.currentTimeMillis() - base;

可以看到,join的内部调用的是wait方法,所以它会释放锁。这样,其他线程就可以调用此线程中的同步方法。

thread.join()的作用是让当前线程等待线程thread终止。当前线程在join的过程中,如果被interrupt了,则join()方法抛出InterruptedException。当调用join()方法,当前线程进入无限期的阻塞,join所属的线程正常执行它的target上的任务,等其销毁后,当前线程继续往后执行。join具有使线程排队运行的作用,有些类似于同步运行的效果。joi...
Join作用 join是定义在Thread类中的方法,作用是阻塞当前线程的执行,等到被调用join的线程对象执行完毕才执行继续执行当前线程。在Java源码中的定义如下: public final void join() throws InterruptedException { join(0); public final synchronized void join(long millis) throws InterruptedException 接下来我们先来看看join的简单使用,这样能
一、Threadjoin方法。 join()的使用场景 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程将可能早于子线程结束。如果主线程需要知道子线程的执行结果时,就需要等待子线程执行结束了。主线程可以sleep(xx),但这样的xx时间不好确定,因为子线程的执行时间不确定,join()方法比较合适这个场景。
单核cpu运行多线程时底层实现原理是多个线程间切换,由于cpu的处理速度很快,看上去像多个线程同时运行。那么我们如何实现让线程T1,T2,T3,在T1执行完成后才执行T2,T2执行完成后才执行T3,也就是线程的串行化,通过Thread类的join方法就可以实现。 join方法:将该线程加入当前线程,当前线程等待加入线程执行完成才继续执行。 public class Threa
public class Main { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new MyThread(), "t1"); Thread t2 = new Thread(new MyThread(), "t2"); t1.start(); t1.join(); t2.start(); t2.join(); System.out.println("主线程完成"); class MyThread implements Runnable { @Override public void run() { System.out.println("线程" + Thread.currentThread().getName() + "开始运行"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); System.out.println("线程" + Thread.currentThread().getName() + "运行结束"); 输出结果: 线程t1开始运行 线程t1运行结束 线程t2开始运行 线程t2运行结束 主线程完成 这段代码创建了两个线程(t1 和 t2),并在主线程的末尾调用了 `t1.join()` 和 `t2.join()` 方法,表示主线程等待 t1 和 t2 两个线程完成后再继续执行。因此,程序输出结果显示了 t1 和 t2 两个线程依次完成后,主线程才结束。