线程中,join方法用来保障线程的执行顺序~
public class DateSource implements Runnable { public void run() { // TODO Auto-generated method stub System.out.println("begin DateSource " + new Date()); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("begin DateSource " + new Date()); } public static void main(String []args){ DateSource ds = new DateSource(); ConnectionDataSource cd = new ConnectionDataSource(); Thread thread1 = new Thread(ds); Thread thread2 = new Thread(cd); thread1.start(); try { // 在执行线程2之前把线程1run方法内代码全部执行完成,在执行线程2 thread1.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } thread2.start(); } }
public class ConnectionDataSource implements Runnable { public void run() { // TODO Auto-generated method stub System.out.println("begin ConnectionDataSource " + new Date()); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("begin ConnectionDataSource " + new Date()); } }
在没有加入thread1.join();线程执行是无序的大家应该都知道,加入thread1.join();就是先保障它先执行完成
执行结果
begin DateSource Wed Oct 14 14:38:55 CST 2015 begin DateSource Wed Oct 14 14:38:58 CST 2015 begin ConnectionDataSource Wed Oct 14 14:38:58 CST 2015 begin ConnectionDataSource Wed Oct 14 14:39:01 CST 2015
主线程向下转时,碰到了thread1.join(),thread1要申请加入到运行中来,就是要CPU执行权。这时候CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的只有thread1了,只有当thread1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。
join方法可以用于临时加入线程,一个线程在运算过程中,如果满足于条件,我们可以临时加入一个线程,让这个线程运算完,另外一个线程再继续运行。
如果将thread1.join()和thread2.start()位置互换,又会怎样呢?主线程开启了thread1、thread2,这时候CPU执行权还在主线程手里。当主线程碰到了thread1.join(),释放执行权,处于冻结状态。活着的thread1、thread2都具备执行资格,这时候CPU便对thread1和thread2交替执行。主线程要等到thread1结束才能活,至于thread2结不结束,与主线程没有丝毫关系。如果thread1结束了,thread2还没结束,主线程就会和thread2抢执行权执行。主线程碰到谁的join,它就等谁。也就是说,谁让它把执行权放出来,它就等谁执行完毕后。至于谁去抢,它不管。
相关推荐
在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...
多线程是Java中的核心特性,它使得程序能够同时执行多个任务,提高了应用程序的效率和响应性。在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 ...
Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
在"java多线程编程实例_Source"这个压缩包中,你可能会找到以上各种概念的实例代码,通过学习这些代码,你可以更深入地理解Java多线程的实现和应用,提高自己的编程能力。记得实践是最好的老师,尝试运行和修改这些...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
总之,Java多线程编程涉及到的概念和技巧广泛,理解并掌握这些知识对于任何Java开发者来说都至关重要,无论是在桌面应用、服务器端开发还是移动应用领域。通过学习本资料,开发者可以深入理解如何在Java中有效地利用...
在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
本文档主要介绍了Java中的多线程编程,包括其基础概念、实现方法、线程控制等方面。 **基本概念** - **进程**:是指计算机正在执行的一个程序实例,比如一个`.class`文件或`.exe`文件。 - **线程**:是进程中的一...
1. **多线程改进**:例如,引入了Fork/Join框架,可以更高效地处理并行任务。 2. **动态类型语言支持**:加入了 invokedynamic 字节码指令,支持Clojure、Groovy等动态语言。 3. **字符串改进**:字符串去除了共享...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。本资料“java-Thread-study-summary.zip”...
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...
这个“JAVA-多线程 所有文件”压缩包很可能包含了一系列关于Java多线程学习的源代码示例和相关文档。下面我们将深入探讨Java多线程的相关知识点。 1. **线程的概念**:线程是操作系统分配CPU时间的基本单位,一个...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着...这个"java多线程测试实例"可能包含了上述部分或全部知识点的实际应用,通过下载并分析实例代码,可以加深对Java多线程编程的理解和实践能力。
总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
### Java多线程文章系列知识点概述 #### 一、Java多线程编程...以上是《Java多线程文章系列》的主要知识点概述,涵盖了从多线程的基础概念到高级应用,希望能帮助读者深入理解Java多线程编程的核心技术和实践技巧。