技术文章 > java >  java基础 > 正文

java中join的原理

小妮浅浅

我们都知道程序中多线程,不同线程之间的运行顺序是我们要考虑的问题。我们可以使用一种join()方法,来对线程执行的顺序进行定义。当某一线程执行完,再运行下一个线程。下面我们就join()概念和源码进行分析和理解,然后带来join()使用方法的实例介绍,一起来看具体内容。

1.join()概念

一直等待直到该线程死亡,可以指定等待指定时间内线程死亡,否则,一直在循环判断线程。如果join的方法在线程实例中被调用,当前运行的线程会被堵塞,直到线程实例运行完成。

2.join()源码

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;
        }
    }
}

可以看出它是利用wait方法来实现的,上面的例子当main方法主线程调用线程t的时候,main方法获取到了t的对象锁,而t调用自身wait方法进行阻塞,只要当t结束或者到时间后才会退出,接着唤醒主线程继续执行。millis为主线程等待t线程最长执行多久,0为永久直到t线程执行结束。

3.join()实例

   //join抢占CPU时间片
    public static void joinTest() throws InterruptedException {
        //定义一个线程
        Thread thread = new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + ": 测试线程开始执行。。。");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + ": 测试线程执行结束了。");
        });
        thread.start();
        System.out.println(thread.getName() + ": 执行join方法");
        thread.join();
        System.out.println(Thread.currentThread().getName() + ": 主线程开始执行");
    }

打印日志:

Thread-0: 执行join方法
Thread-0: 测试线程开始执行。。。
Thread-0: 测试线程执行结束了。
main: 主线程开始执行

以上就是java中join的原理,学会后我们可以对线程的任务顺序进行操作,看懂join的原理后,就试试代码部分的使用吧。

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 java守护线程应用
 java中Thread的停止
 java中wait是什么意思
 java notify()的唤醒
 java中使用notifyall
 sleep在java中的实现
 yield在java中的使用
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
推荐视频
视频教程分类