join是Thread的实例方法,官方解释为:等待该线程终止。
其作用就是将调用join的线程优先执行,当前正在执行的线程阻塞,直到调用join方法的线程执行完毕或者被打断,主要用于线程之间的交互。
还有两个重载的方法:
1、join(long millis),等待该线程终止的时间最长为 millis 毫秒。为 0 意味着要一直等下去。
2、join(long millis, int nanos),等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
下面以几个例子说明:
例1:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); taskD.start(); try { hread.sleep(2000); System.out.println("taskD join,主线程等待."); /* * 此处如果taskD没有join,那么主线程会优先执行完毕,taskD在未执行完毕时中断。 * join之后,主线程等待线程taskD执行完毕再执行 */ taskD.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
例2:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); TaskE taskE = new TaskE(taskD); try { taskD.start(); Thread.sleep(2000); taskE.start(); /* * 此处taskE join,主线程等待, * 在taskE执行时,taskD join,所以 最有的执行优先级时taskD,taskE,主线程 */ taskE.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
例3:
System.out.println("主线程开始."); TaskD taskD = new TaskD(); TaskE taskE = new TaskE(taskD); try { taskD.start(); Thread.sleep(2000); taskE.start(); /* * 此处taskE不进行 join,主线程不等待, * 在taskE执行时,taskD join, taskE等待taskD执行完毕再执行 * 但由于主线程没有阻塞,优先taskD和taskE执行完毕,所以taskD和taskE被中断。 */ //System.out.println("taskE join,主线程等待."); //taskE.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束.");
相关推荐
在Java编程语言中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程(调用者)等待另一个线程(被调用者)执行完成。`Thread.join()`的使用能够有效地解决多线程环境中的顺序执行问题,确保线程间的...
Java 中 Thread.join() 的使用方法 Thread.join() 是 Java 中的一个重要方法,该方法允许一个线程等待另一个线程的执行完成。下面我们将详细介绍 Thread.join() 的使用方法、源码分析和示例代码。 1. join() 的...
在Java中,线程是通过`java.lang.Thread`类或者实现`Runnable`接口来创建和管理的。这个资料包包含的是关于Java线程的中英文参考资料,包括书籍和源代码。 "Java.Threads,3rd.Edition.chm"可能是一个关于Java线程的...
在Java中,可以通过两种方式创建线程:继承Thread类或实现Runnable接口。继承Thread类的方法直接扩展Thread类并重写run()方法,而实现Runnable接口则需要创建一个实现了Runnable接口的类,并在run()方法中定义线程的...
在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景,理解它们之间的区别对于编写高效、可维护的多线程应用至关重要。 ### 继承...
join()方法是Thread类中的一个实例方法,当一个线程A执行了threadB.join()操作时,线程A会等待线程B执行完成后才继续执行。这通常用于需要等待子线程完成之后才继续执行的情况。 以上就是对Java线程中wait、await、...
Java线程是Java SE(标准版)平台中的核心特性,它允许程序同时执行多个任务,提高了应用程序的效率和响应性。在多核处理器系统中,线程的优势更加明显,因为每个线程可以在不同的处理器上并发运行。本学习教程旨在...
`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 首先,我们来看`join()`的基本用法。在`Father`类(主线程类)中,创建了一个`Son`类(子线程类)的实例`s`,并调用`s.start()`启动子...
在实际应用中,join()方法通常配合Thread类的start()方法一起使用。start()方法用于启动新线程,而join()方法则用于确保当前线程等待该线程执行结束。例如: ```java Thread thread = new Thread(new Runnable() { ...
static void ensure_join(JavaThread *thread) { // 处理join相关的销毁逻辑 } 可以看到,在线程结束时,Java虚拟机会执行exit方法,并在这个方法中调用ensure_join方法来处理join相关的销毁逻辑。ensure_join方法...
在Java中,有两种方式来创建和管理线程:通过继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当你需要一个具有自定义行为的线程时,可以创建一个新的类,该类继承自`Thread`。重写`Thread`类的`run()`...
在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...
`join()`方法定义在`java.lang.Thread`类中,其主要功能是使调用该方法的线程(这里称为调用线程)暂停执行,直到目标线程(即`join()`方法所在的线程)执行完毕。这样,可以确保调用线程在目标线程执行完成后才...
在Java编程中,线程(Thread)是程序执行的最小单元,它与进程一起构成了操作系统的基础。Java提供了丰富的线程管理功能,使得开发者可以方便地进行多任务并行处理。本篇将深入探讨Java线程的核心概念、创建方式以及...
在Java中,通过实现Runnable接口或者继承Thread类可以创建并运行多线程。本资料"java_Thread.rar"提供了一些Java多线程的实践案例,对于深入理解和应用Java多线程技术具有很高的参考价值。 首先,我们要理解线程的...
- 在Java中,线程通过实现`Runnable`接口或继承`Thread`类来创建。 2. **线程的创建与启动** - 实现`Runnable`接口:创建一个类实现`Runnable`,然后将其实例传递给`Thread`的构造函数。 - 继承`Thread`类:直接...
`Thread`类是Java中用于实现线程的基本接口,它位于`java.lang`包中。本实例将深入探讨`Thread`类的使用,这对于初学者掌握多线程编程至关重要。 在Java中,创建线程主要有两种方式:继承`Thread`类和实现`Runnable...
Thread是Java中的一个类,而Runnable是一个接口。Thread类实现了Runnable接口,Runnable接口只有一个run()方法,完全是线程运行规范。 Thread类是Java中的一个类,它实现了Runnable接口。Thread类有一个start()...
在Java多线程编程中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程等待另一个线程结束执行后再继续执行。这个方法在处理并发控制和线程协作时非常有用,确保线程间的执行顺序。下面我们将深入探讨`...