`

java多线程 -- join()方法应用

阅读更多

线程中,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多线程--等待所有子线程执行完的五种方法.docx

    在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    多线程是Java中的核心特性,它使得程序能够同时执行多个任务,提高了应用程序的效率和响应性。在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 ...

    Java多线程-Thread类的常用结构及线程优先级

    Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java多线程源码-source

    在"java多线程编程实例_Source"这个压缩包中,你可能会找到以上各种概念的实例代码,通过学习这些代码,你可以更深入地理解Java多线程的实现和应用,提高自己的编程能力。记得实践是最好的老师,尝试运行和修改这些...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    JAVA-JavaThreadProgramming-Sams.zip_JAVA 设计_java 多线程_java 线程_多线程

    总之,Java多线程编程涉及到的概念和技巧广泛,理解并掌握这些知识对于任何Java开发者来说都至关重要,无论是在桌面应用、服务器端开发还是移动应用领域。通过学习本资料,开发者可以深入理解如何在Java中有效地利用...

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    4JAVA编程高级-多线程编程

    本文档主要介绍了Java中的多线程编程,包括其基础概念、实现方法、线程控制等方面。 **基本概念** - **进程**:是指计算机正在执行的一个程序实例,比如一个`.class`文件或`.exe`文件。 - **线程**:是进程中的一...

    java-7-openjdk-amd64.tar.gz

    1. **多线程改进**:例如,引入了Fork/Join框架,可以更高效地处理并行任务。 2. **动态类型语言支持**:加入了 invokedynamic 字节码指令,支持Clojure、Groovy等动态语言。 3. **字符串改进**:字符串去除了共享...

    java-Thread-study-summary.zip_java 多线程

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。本资料“java-Thread-study-summary.zip”...

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    JAVA-多线程 所有文件

    这个“JAVA-多线程 所有文件”压缩包很可能包含了一系列关于Java多线程学习的源代码示例和相关文档。下面我们将深入探讨Java多线程的相关知识点。 1. **线程的概念**:线程是操作系统分配CPU时间的基本单位,一个...

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    java多线程测试实例

    Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着...这个"java多线程测试实例"可能包含了上述部分或全部知识点的实际应用,通过下载并分析实例代码,可以加深对Java多线程编程的理解和实践能力。

    Java多线程实现异步调用实例

    总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。

    Java多线程文章系列.pdf

    ### Java多线程文章系列知识点概述 #### 一、Java多线程编程...以上是《Java多线程文章系列》的主要知识点概述,涵盖了从多线程的基础概念到高级应用,希望能帮助读者深入理解Java多线程编程的核心技术和实践技巧。

Global site tag (gtag.js) - Google Analytics