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方法的使用的主要内容,如果未能解决你的问题,请参考以下文章