• Java Thread.join()具有什么功能呢?


    转自:

    Java Thread.join()具有什么功能呢?

    下文笔者讲述java中Thread.join()的功能简介说明,如下所示:

    Thread.join()方法的功能:
      用于等待进程
     如:主线程创建子线程
          当子线程运行时间非常长时,主线程通常会在子线程之前结束,
    	   当主线程需等待子线程的处理结果时,此时我们需要使用join()方法 
    

    Thread.join()方法的语法

    //无参数的join()等价于join(0),作用是一直等待该线程死亡
    join() throws InterruptedException;  
    //最多等待该线程死亡millis毫秒
    join(long millis, int nanos) throws InterruptedException;  
    //最多等待该线程死亡millis毫秒加nanos纳秒
    join(long millis, int nanos) throws InterruptedException ; 
    

     package com.java265.other;
    
    public class Test3 {
    	public static void main(String[] args) {
    		String threadName = Thread.currentThread().getName();
    		System.out.println(threadName + " start.");
    		BThread bt = new BThread();
    		AThread at = new AThread(bt);
    		try {
    			bt.start();
    			Thread.sleep(2000);
    			at.start();
    			at.join();
    		} catch (Exception e) {
    			System.out.println("Exception from main");
    		}
    		System.out.println(threadName + " end!");
    	}
    }
    
    class BThread extends Thread {
    	public BThread() {
    		super("[BThread] Thread");
    	};
    
    	public void run() {
    		String threadName = Thread.currentThread().getName();
    		System.out.println(threadName + " start.");
    		try {
    			for (int i = 0; i < 6; i++) {
    				System.out.println(threadName + " loop at " + i);
    				Thread.sleep(1000);
    			}
    			System.out.println(threadName + " end.");
    		} catch (Exception e) {
    			System.out.println("Exception from " + threadName + ".run");
    		}
    	}
    }
    
    class AThread extends Thread {
    	BThread bt;
    
    	public AThread(BThread bt) {
    		super("[AThread] Thread");
    		this.bt = bt;
    	}
    
    	public void run() {
    		String threadName = Thread.currentThread().getName();
    		System.out.println(threadName + " start.");
    		try {
    			bt.join();
    			System.out.println(threadName + " end.");
    		} catch (Exception e) {
    			System.out.println("Exception from " + threadName + ".run");
    		}
    	}
    }
    ------运行以上代码,将输出以下信息------
    main start.
    [BThread] Thread start.
    [BThread] Thread loop at 0
    [BThread] Thread loop at 1
    [BThread] Thread loop at 2
    [AThread] Thread start.
    [BThread] Thread loop at 3
    [BThread] Thread loop at 4
    [BThread] Thread loop at 5
    [BThread] Thread end.
    [AThread] Thread end.
    main end!
    
    join()方法注意事项:
      1. 当一个线程s在另一个线程t上调用t.join()
           此线程s将被挂起,直到目标线程t结束才恢复(此时t.isAlive()返回为假)
          也可以在调用join()时带上一个超时参数(单位可以是毫秒,或者毫秒和纳秒)
          当目标线程在这段时间内还没有结束的话,join()方法总能返回
           对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法。
     2. 当线程生成后,但还未被起动,isAlive()将返回false,调用它的join()方法是没有作用的
          将直接继续向下执行 
  • 相关阅读:
    《C++ primer plus》精炼(OOP部分)——对象和类(6)
    二进制部署Docker
    91. 异步编程的实现方式?
    如何判断BUG是前端BUG还是后端BUG
    干货 | BitSail Connector 开发详解系列一:Source
    使用tkinter开发GUI程序 -- 输入文本框Entry、文字框Text、滚动条Scrollbar
    Espresso Test 6: RecyclerView
    Ubuntu16.04下载地址
    QWebEngine集成Netron可视化模型
    任意长度循环卷积&单位根反演 学习笔记
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126221649