`

Java多线程初学者指南(5):join方法的使用

阅读更多
在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。下面的代码演示了join的用法。

package mythread;

public class JoinThread extends Thread
{
    public static volatile int n = 0;

    public void run()
    {
        for (int i = 0; i < 10; i++, n++)
            try
            {
                sleep(3);  // 为了使运行结果更随机,延迟3毫秒
            }
            catch (Exception e)
            {
            }                                      
    }
    public static void main(String[] args) throws Exception
    {
        Thread threads[] = new Thread[100];
        for (int i = 0; i < threads.length; i++)  // 建立100个线程
            threads[i] = new JoinThread();
        for (int i = 0; i < threads.length; i++)   // 运行刚才建立的100个线程
            threads[i].start();
        if (args.length > 0)  
            for (int i = 0; i < threads.length; i++)   // 100个线程都执行完后继续
                threads[i].join();
        System.out.println("n=" + JoinThread.n);
    }
} 


    在例程2-8中建立了100个线程,每个线程使静态变量n增加10.如果在这100个线程都执行完后输出n,这个n值应该是1000.

    1.  测试1
    使用如下的命令运行上面程序:

java mythread.JoinThread


    程序的运行结果如下:

n=442


    这个运行结果可能在不同的运行环境下有一些差异,但一般n不会等于1000.从上面的结果可以肯定,这100个线程并未都执行完就将n输出了。

    2.  测试2
    使用如下的命令运行上面的代码:

    在上面的命令行中有一个参数join,其实在命令行中可以使用任何参数,只要有一个参数就可以,这里使用join,只是为了表明要使用join方法使这100个线程同步执行。

    程序的运行结果如下:

n=1000


    无论在什么样的运行环境下运行上面的命令,都会得到相同的结果:n=1000.这充分说明了这100个线程肯定是都执行完了,因此,n一定会等于1000.

分享到:
评论
1 楼 gongm_24 2010-11-26  
注意:这里输入一个参数后结果也不一定为1000,原因可见下一章,因为volatile关键字失效,不能保证n++的原子性操作。

相关推荐

    Java多线程初学者指南:线程的生命周期.pdf

    本文将深入探讨Java多线程中的线程生命周期,以及如何控制线程的状态转换。 线程的生命周期通常包括五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。下面...

    Java多线程基础学习指南:原理、实现与实战

    内容概要:本文详细介绍了Java多线程的基本概念、实现方式、线程控制方法、线程同步、线程池及其应用。首先解释了线程的概念及其优势,接着讲述了如何通过继承Thread类、实现Runnable接口和使用Callable接口来创建多...

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

    本资料“java-Thread-study-summary.zip”提供了一个深入学习Java多线程的综合指南,特别适合初学者进行实践操作。 1. **线程的创建** - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`...

    Java线程(Java.Thread)(中英版)

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过`java....无论是初学者还是有经验的开发者,都可以从中受益,提升自己的并发编程能力。

    多线程并发学习书籍

    2. **《Java并发编程从入门到精通》2015版**:这本书可能是针对初学者的指南,涵盖了多线程的基础概念,如线程的创建、生命周期管理、线程间的通信(如wait/notify、join)以及线程池的使用。它也可能讨论了如何避免...

    java的学校资料java的学校资料

    6. **多线程**:Java支持多线程编程,理解线程的概念、线程的创建与同步、线程间的通信(如wait()、notify()、join()等)是高级Java开发的基础。 7. **Java Swing和JavaFX**:这两者是Java的图形用户界面(GUI)...

    core java 7th

    《Core Java 7th》是Java编程领域的一本权威指南,尤其适合初学者以及有经验的开发者作为参考手册。本书全面覆盖了Java的核心概念和技术,包括面向对象编程、类库、API、多线程、网络编程等多个方面。下面将详细阐述...

    Java_9_Concurrency_Cookbook_-_Second_Edition.pdf

    ### Java 9 并发编程知识点详解 #### 标题:Java 9 并发编程实战指南 —— 第二版 此书名为《Java 9 并发编程实战指南 —— 第二版》...无论是对于初学者还是有一定经验的开发人员来说,都是一本值得阅读的好书。

    java_practical_guide.rar_practical java

    6. **多线程**:讨论了Java中如何创建和管理线程,线程同步和通信方法,如synchronized关键字、wait()、notify()、join()等。 7. **网络编程**:介绍Socket编程,HTTP和HTTPS协议的实现,以及URL和URLConnection类...

    java jdk1.8 中文谷歌翻译版

    "使用说明.docx"可能是关于如何安装、配置和使用JDK 1.8的指南,对于初学者尤其有用。"jdk api 1.8_google.CHM"是CHM格式的Google翻译版,CHM是微软的HTML帮助文件,便于离线查看。 总之,Java JDK 1.8的中文谷歌...

    程序员之Java学习方法

    Java编程语言作为全球最受欢迎的开发语言之一,深受程序员的喜爱,尤其对于初学者,掌握有效的学习方法至关重要。以下是一份详细的Java学习指南,旨在帮助你高效地掌握这门强大的语言。 一、基础知识入门 1. 理解...

    java7Beginners3rdEd.zip

    Java 7初学者指南第三版源代码 Java 7,也称为Java SE 7 (Java Platform, Standard Edition 7),是Java编程语言的一个重要版本,它引入了许多新特性,优化了旧有的功能,并提升了开发效率。这个压缩包"java7...

    java虚拟机并发编程.pdf

    总之,《Java虚拟机并发编程》是一本全面而深入的指南,无论你是初学者还是有经验的开发者,都能从中受益,提升你在Java并发编程领域的专业能力。通过学习本书,你将能更好地应对多线程环境下的挑战,设计出更加健壮...

    java核心技术第八版(英文)

    5. **并发改进**:包括Fork/Join框架、并发集合和并发工具类,用于优化多线程编程。 6. **JVM内部**:深入JVM的工作原理,如垃圾回收、内存管理、类加载机制。 7. **Java EE**:简要介绍企业级Java应用程序的开发,...

    JAVA API文档.rar 有一版java 1.7 中文版 和一Java1.8 英文版

    在本压缩包中,包含了Java 1.7的中文版和Java 1.8的英文版API文档,这对于Java开发初学者来说是非常有价值的资源。 ### Java 1.7中文版API Java 1.7,也被称为Java 7,是Oracle公司在2011年发布的Java平台标准版。...

    候捷的java精髓

    5. **多线程**:讲解线程的创建、同步和通信,包括synchronized关键字、wait()、notify()和join()方法的应用。 6. **网络编程**:介绍Socket编程,以及客户端和服务端的交互实现。 7. **反射机制**:深入理解Java...

    Java文档五百篇

    6. **多线程**:Java提供了丰富的多线程支持,包括线程的创建、同步、通信以及并发工具类的使用,如Semaphore、CountDownLatch等。 7. **网络编程**:Java的Socket编程允许开发网络应用程序,理解TCP/IP协议和HTTP...

    《Java 并发编程实战》.zip

    总之,《Java 并发编程实战》是一本全面、深入的并发编程指南,无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的见解和实战经验。通过阅读本书,你将能够更好地应对多线程环境中的挑战,编写出更加健壮、高...

    Java_EE软件工程师就业求职手册

    - **Java概述与开发环境搭建**:介绍Java的历史背景、特点及其开发环境的搭建步骤,为初学者提供入门指南。 - **语言基础与命名规范**:涵盖Java的基础语法,如类和对象的概念、命名规则、实例与静态成员的区别,...

Global site tag (gtag.js) - Google Analytics