在上面的例子中多次使用到了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.
分享到:
相关推荐
本文将深入探讨Java多线程中的线程生命周期,以及如何控制线程的状态转换。 线程的生命周期通常包括五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。下面...
内容概要:本文详细介绍了Java多线程的基本概念、实现方式、线程控制方法、线程同步、线程池及其应用。首先解释了线程的概念及其优势,接着讲述了如何通过继承Thread类、实现Runnable接口和使用Callable接口来创建多...
本资料“java-Thread-study-summary.zip”提供了一个深入学习Java多线程的综合指南,特别适合初学者进行实践操作。 1. **线程的创建** - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过`java....无论是初学者还是有经验的开发者,都可以从中受益,提升自己的并发编程能力。
2. **《Java并发编程从入门到精通》2015版**:这本书可能是针对初学者的指南,涵盖了多线程的基础概念,如线程的创建、生命周期管理、线程间的通信(如wait/notify、join)以及线程池的使用。它也可能讨论了如何避免...
6. **多线程**:Java支持多线程编程,理解线程的概念、线程的创建与同步、线程间的通信(如wait()、notify()、join()等)是高级Java开发的基础。 7. **Java Swing和JavaFX**:这两者是Java的图形用户界面(GUI)...
《Core Java 7th》是Java编程领域的一本权威指南,尤其适合初学者以及有经验的开发者作为参考手册。本书全面覆盖了Java的核心概念和技术,包括面向对象编程、类库、API、多线程、网络编程等多个方面。下面将详细阐述...
### Java 9 并发编程知识点详解 #### 标题:Java 9 并发编程实战指南 —— 第二版 此书名为《Java 9 并发编程实战指南 —— 第二版》...无论是对于初学者还是有一定经验的开发人员来说,都是一本值得阅读的好书。
6. **多线程**:讨论了Java中如何创建和管理线程,线程同步和通信方法,如synchronized关键字、wait()、notify()、join()等。 7. **网络编程**:介绍Socket编程,HTTP和HTTPS协议的实现,以及URL和URLConnection类...
"使用说明.docx"可能是关于如何安装、配置和使用JDK 1.8的指南,对于初学者尤其有用。"jdk api 1.8_google.CHM"是CHM格式的Google翻译版,CHM是微软的HTML帮助文件,便于离线查看。 总之,Java JDK 1.8的中文谷歌...
Java编程语言作为全球最受欢迎的开发语言之一,深受程序员的喜爱,尤其对于初学者,掌握有效的学习方法至关重要。以下是一份详细的Java学习指南,旨在帮助你高效地掌握这门强大的语言。 一、基础知识入门 1. 理解...
Java 7初学者指南第三版源代码 Java 7,也称为Java SE 7 (Java Platform, Standard Edition 7),是Java编程语言的一个重要版本,它引入了许多新特性,优化了旧有的功能,并提升了开发效率。这个压缩包"java7...
总之,《Java虚拟机并发编程》是一本全面而深入的指南,无论你是初学者还是有经验的开发者,都能从中受益,提升你在Java并发编程领域的专业能力。通过学习本书,你将能更好地应对多线程环境下的挑战,设计出更加健壮...
5. **并发改进**:包括Fork/Join框架、并发集合和并发工具类,用于优化多线程编程。 6. **JVM内部**:深入JVM的工作原理,如垃圾回收、内存管理、类加载机制。 7. **Java EE**:简要介绍企业级Java应用程序的开发,...
在本压缩包中,包含了Java 1.7的中文版和Java 1.8的英文版API文档,这对于Java开发初学者来说是非常有价值的资源。 ### Java 1.7中文版API Java 1.7,也被称为Java 7,是Oracle公司在2011年发布的Java平台标准版。...
5. **多线程**:讲解线程的创建、同步和通信,包括synchronized关键字、wait()、notify()和join()方法的应用。 6. **网络编程**:介绍Socket编程,以及客户端和服务端的交互实现。 7. **反射机制**:深入理解Java...
6. **多线程**:Java提供了丰富的多线程支持,包括线程的创建、同步、通信以及并发工具类的使用,如Semaphore、CountDownLatch等。 7. **网络编程**:Java的Socket编程允许开发网络应用程序,理解TCP/IP协议和HTTP...
总之,《Java 并发编程实战》是一本全面、深入的并发编程指南,无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的见解和实战经验。通过阅读本书,你将能够更好地应对多线程环境中的挑战,编写出更加健壮、高...
- **Java概述与开发环境搭建**:介绍Java的历史背景、特点及其开发环境的搭建步骤,为初学者提供入门指南。 - **语言基础与命名规范**:涵盖Java的基础语法,如类和对象的概念、命名规则、实例与静态成员的区别,...