0°

join()方法的使用

在多线程开发中常常遇到了一个问题就是希望某一个线程在执行完毕后在执行主线程。在Java中通常用join()方法来实现需求。join()方法的目的是所属的线程正常运行run()方法中的逻辑,当前线程无限期阻塞,也就是说一直等待所属线程执行完,当前线程才会执行,底层实现原理是调用了wait()方法。

/**
 * 管理用户请求
 *
 * @author Sama
 * @author admin@jilinwula.com
 * @date 2017-03-15 10:44
 * @since 1.0.0
 */
public class RequestAdmin extends Thread {

    @Override
    public void run() {
        try {
            System.out.println("任务执行开始");
            Thread.sleep(1000);
            System.out.println("任务执行结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 测试类
 *
 * @author Sama
 * @author admin@jilinwula.com
 * @date 2017-03-15 10:49
 * @since 1.0.0
 */
public class RequestRun {
    public static void main(String[] args) throws InterruptedException {
        RequestAdmin requestAdmin = new RequestAdmin();
        requestAdmin.start();
        System.out.println("主任务执行");
    }
}
主任务执行
任务执行开始
任务执行结束

我们看主任务先执行了,然后才执行的是子任务。这时我们调用join()方法,就可以实现先执行子任务在执行主任务的需求了。

/**
 * 测试类
 *
 * @author Sama
 * @author admin@jilinwula.com
 * @date 2017-03-15 10:49
 * @since 1.0.0
 */
public class RequestRun {
    public static void main(String[] args) throws InterruptedException {
        RequestAdmin requestAdmin = new RequestAdmin();
        requestAdmin.start();
        requestAdmin.join();
        System.out.println("主任务执行");
    }
}
任务执行开始
任务执行结束
主任务执行

我们看实现了我们想要的逻辑。但在使用join()方法是还要有几点注意的地方:

  • 必须在线程启动之后调用,在启动这前调用是没有效果的。
  • join()方法在执行完后会立即释放锁。
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论