Day8-Java线程中join方法的使用

Posted <一蓑烟雨任平生>

tags:

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

Java多线程中join的方法使用:

package com.tset.two;

/**
 * @author :caizhengjie
 * @description:TODO
 * @date :2021/7/22 10:18 下午
 */
public class TestThreadJoin {
    public static void main(String[] args) throws InterruptedException {

        Object lock = new Object();
        // 线程的join方法
        Runnable task = new Runnable() {
            @Override
            public void run() {
                System.out.println("run() " + Thread.currentThread().getName() + " start");
                try {
                    // 让线程睡5秒
                    Thread.sleep(5 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("run() " + Thread.currentThread().getName() + " over");
            }
        };

        Thread t1 = new Thread(task,"t1");
        t1.start();

        // 主线程结束
        System.out.println(Thread.currentThread().getName() + " over");
        
    }
}

先看不加join方法:

main over
run() t1 start
run() t1 over -- t1线程睡5秒钟结束

假设我有这样的一个需求,我需要t1线程执行结束后才打印输出主线程结束,我们可以使用join方法

Thread t1 = new Thread(task,"t1");
t1.start();
// join作用:假设我有这样的一个需求,我需要t1线程执行结束后才打印输出主线程结束
t1.join();

这样输出的结果:

run() t1 start
run() t1 over -- t1线程睡5秒钟结束
main over -- main线程结束

但是如果我有这样的一个需求,t1线程在执行run方法的时候需要耗费5秒钟,但是我们主线程只能等三秒钟的时间,这时我们可以让线程设置超时时间,t1执行到三秒钟的时候,主线程结束

Thread t1 = new Thread(task,"t1");
t1.start();
// join作用:假设我有这样的一个需求,我需要t1线程执行结束后才打印输出主线程结束

// 设置线程超时时间
t1.join(3000);

运行结果:

run() t1 start
main over -- 主线程等不及三秒,先执行
run() t1 over -- 5秒过后t1线程才会结束

类似这种设置超时时间的方法也有其他方法,比如:wait和sleep方法

t1.join(3000);
lock.wait(3000);
Thread.sleep(3000);

有了这些超时时间避免一些死锁,比方说t1线程长时间执行不完我们就不等了继续往下走


以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

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

java join 方法的使用

Java多线程-join的使用

Java:join方法详解

Java中join的使用

Java多线程学习:Join()

多线程等待所有子线程执行完使用总结——wait()和notify(),join()方法