zoukankan      html  css  js  c++  java
  • join()

    1)谁等待这个线程结束

    2)等多久

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

     示例:

        public static void main(String[] args) {
    
            Thread t = new Thread(() -> {
                System.out.println(1);
            });
    
            t.start();
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
        }

    Waits for this thread to die.

    this 指的是正在调用 join 方法的引用,即 t

    那么便是当前线程(主线程,t的父线程)等待 t 结束

     蓝色线代表主线程,绿色线代表子线程,x 轴代表时间条,y轴代表两种运行状态

    情形1:子线程运行时间< 父线程等待时间 (父线程多等了一会儿,浪费了点时间)

    情形2:子线程运行时间>父线程等待时间 (父线程等的时间不够,子线程还没结束,父线程就着急继续往下进行了)

    情形3:子线程运行时间==父线程等待时间 (子线程一结束,父线程就继续往下进行)

  • 相关阅读:
    JS
    JS
    JS
    CSS
    CSS
    CSS
    NPOI导出自动换行效果
    Httpcookie的简单应用
    前台JS设置Cookies后台读取刚设置的Cookies
    SQL SERVER 如何调试存储过程
  • 原文地址:https://www.cnblogs.com/zno2/p/10127775.html
Copyright © 2011-2022 走看看