位置:首页 > Java > 线程插队的原因与处理方法详解

线程插队的原因与处理方法详解

时间:2026-08-15  |  作者:清风无痕  |  阅读:0

现实里,“插队”这种事并不少见;放到Thread类里,其实也有一个类似的机制,那就是join()方法。

一个线程里一旦调用了另一个线程的join(),当前这个调用方线程就会先停下来进入阻塞状态。

等被join()进去的那个线程执行完毕之后,它才会恢复并继续往下运行。

下面结合一个案例,具体看看join()方法到底怎么用,示例见文件1。

示例代码

文件1 Example10.ja va

 1    class EmergencyThread implements Runnable {
 2        public void run() {
 3            for (int i = 1; i < 6; i++) {
 4                System.out.println(Thread.currentThread().getName()
 5                        +"输入:"+i);
 6            }
 7        }
 8    }
 9    public class Example10 {
 10        public static void main(String[] args) throws InterruptedException {
 11            // 创建线程
 12            Thread thread1 = new Thread(new EmergencyThread(),"thread1");
 13            thread1.start(); // 开启线程
 14            for (int i = 1; i < 6; i++) {
 15                System.out.println(Thread.currentThread().getName()
 16                                     +"输入:"+i);
 17                if (i == 2) {
 18                    thread1.join(); // 调用join()方法
 19                }
 20            }
 21        }
 22    }

运行结果如图1所示。

线程插队的原因与处理方法详解_wishdown.com

图1 运行结果

运行过程分析

文件1中,在main线程中开启了一个线程thread1。

这两个线程会相互争夺CUP使用权输出语句。

当main线程中的循环变量为2时,调用thread1线程的join()方法。

这时,thread1线程就会“插队”优先执行,并且整个程序执行完毕后才会执行其他线程。

从运行结果可以看出,当main线程输出2以后,thread1线程就开始执行。

直到执行完毕,main线程才继续执行。

join()方法的另一种形式

在Thread类里,除了常见的无参线程插队方法join(),还提供了一个带时间参数的版本:join(long millis)。

这个方法一旦执行,当前线程会先暂停,等被插入的线程运行到指定时间之后,其他线程才会继续往下执行。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多