MSDN:Blocks the calling thread until a thread terminates
1. 什么是 the calling thread?
2. 什么是 a thread?
运行一个程序,即开启了一个进程和至少一个线程,干活的是线程而非进程!the calling thread 我们可以认为是MainThread(或者调用线程的线程,是不是有点绕?呵呵),a thread 我们就认为是被调用的线程。
最后,我们可以这样翻译MSDN:当 a thread 调用Join方法的时候,MainThread 就被停止执行,直到 a thread 线程执行完毕。
下面是测试代码:
class ThreadTesterA implements Runnable {
private int counter;
@Override
public void run() {
while (counter <= 10) {
System.out.print("Counter = " + counter + " ");
counter++;
}
System.out.println();
}
}
class ThreadTesterB implements Runnable {
private int i;
@Override
public void run() {
while (i <= 10) {
System.out.print("i = " + i + " ");
i++;
}
System.out.println();
}
}
public class ThreadTester {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new ThreadTesterA());
Thread t2 = new Thread(new ThreadTesterB());
t1.start();
t1.join(); // wait t1 to be finished
t2.start();
t2.join(); // in this program, this may be removed
}
}
如果去掉t1.join()这个语句过后, 输出的顺序是乱的, 加上这个语句过后, 就会按照顺序输出, 从某种意义上说实现了同步。
ref: http://www.cnblogs.com/SkySoot/archive/2012/06/27/2566004.html
ref: http://my.oschina.net/u/2338362/blog/516237?p=1
相关推荐
在Java中,有两种方式来创建和管理线程:通过继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当你需要一个具有自定义行为的线程时,可以创建一个新的类,该类继承自`Thread`。重写`Thread`类的`run()`...
本资料"java_Thread.rar"提供了一些Java多线程的实践案例,对于深入理解和应用Java多线程技术具有很高的参考价值。 首先,我们要理解线程的基本概念。线程是程序执行的最小单元,每个线程都拥有自己独立的程序...
- ** Fork/Join 框架**:Java 7引入了Fork/Join框架,基于工作窃取算法,用于高效地处理大任务。`RecursiveTask`和`RecursiveAction`是实现该框架的基础类。 - **并发集合**:如`ConcurrentHashMap`、`...
"06_Thread_java_boardkbl_"这个主题显然聚焦于Java中的线程机制及其实际应用。线程是多任务处理的核心,它允许多个部分在同一时间运行,提高了程序的效率和响应性。下面我们将深入探讨Java线程相关的知识点。 1. *...
- **join()**:等待该线程结束,再继续执行当前线程。 - **sleep(long milliseconds)**:让当前线程睡眠指定的时间,释放CPU资源。 - **yield()**:让当前线程暂停,让其他线程有机会运行。 - **interrupt()**:...
- 线程控制:start()、sleep()、join()、yield()、interrupt()等方法。 - 同步机制:synchronized关键字和Lock接口。 这份80页的学习笔记详细讲解了这些核心概念,并使用了彩色标记突出重点内容,对于新手复习和...
Java提供了丰富的线程控制方法,如`start()`启动线程,`join()`使当前线程等待指定线程结束,`sleep()`让线程暂时休眠,`interrupt()`中断线程,以及`yield()`让当前线程暂停执行,让其他线程有机会运行。...
5. **多线程编程**:包括Thread类的使用、Runnable接口的实现、线程同步与通信(如synchronized关键字、wait()、notify()、join()等方法),以及线程池的运用。多线程编程是Java在并发处理上的重要特性,通过练习可...
Java 7还引入了Fork/Join框架和Parallel Streams,提高了多核处理器环境下并行计算的效率。 5. **异常处理**:Java强制异常处理,通过try-catch-finally语句块捕获和处理异常。Java 7的try-with-resources语句使得...
Java提供了丰富的并发工具类和API,如`Thread`、`Runnable`、`ExecutorService`、`Future`等,这些工具可以帮助我们创建、管理和控制线程。同时,Java的并发模型基于监视器(Monitor),通过`synchronized`关键字和`...
在这个`java_thread_source_code`压缩包中,我们很可能会找到Java `Thread`类的源代码实现,这将有助于深入理解Java线程的工作原理。 在Java中,`Thread`类是`java.lang`包的一部分,它是所有用户线程的超类。我们...
11. **多线程**:线程的创建(Thread类、Runnable接口)、同步机制(synchronized、wait()、notify()、join()),线程池(ExecutorService)。 12. **反射**:运行时动态获取类信息,创建和调用对象,修改私有属性...
`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 首先,我们来看`join()`的基本用法。在`Father`类(主线程类)中,创建了一个`Son`类(子线程类)的实例`s`,并调用`s.start()`启动子...
在Java中,创建线程主要有两种方式:一是继承`Thread`类,二是实现`Runnable`接口。继承`Thread`类直接复写`run()`方法,然后创建实例调用`start()`启动线程;而实现`Runnable`接口则需要将`run()`方法放在实现类中...
Java提供了多种线程控制机制,如sleep()方法让线程进入阻塞状态,yield()方法让当前线程暂停,让其他线程有机会运行,join()方法让一个线程等待另一个线程完成,以及synchronized关键字用于线程同步,防止数据竞争...
Java通过`java.lang.Thread`类和`java.util.concurrent`包提供了丰富的线程支持。创建线程有两种主要方式:继承Thread类和实现Runnable接口。继承Thread类直接复写run()方法,而实现Runnable接口则需要将run()方法...
4. **多线程**:Java 7提供了更强大的多线程支持,`java.lang.Thread`类和`java.util.concurrent`包中的`ExecutorService`、`Future`、`Callable`等接口,使得并发编程更加灵活高效。 5. **NIO.2**:Java 7引入了非...
此外,Java还提供了`Runnable`接口,它没有`Thread`类那么多的内部状态和方法,因此更适合那些不希望扩展`Thread`类的场景。通过实现`Runnable`接口,可以在类中定义`run()`方法,然后将`Runnable`实例传递给`Thread...
Java中的线程处理是通过`java.lang.Thread`类及其相关接口来实现的。本篇文章将深入探讨Java中的线程概念、创建线程的方式以及线程的管理与同步。 一、线程基础 线程允许程序并发执行,提高了资源利用率和响应速度...
- **Fork/Join框架**:通过分治法的思想来并行处理任务,适用于大量细粒度任务的处理场景。 #### 五、结语 《Java Concurrency in Practice》不仅是一本关于Java并发编程的指南,更是一本深入理解并发编程原理和...