join方法用得不多,当A线程执行到了B线程的join()方法时,A就会等待,等B线程都运行完,A线程才会执行。使用join()方法时,会产生异常 - - - 只针对运行的主线程有作用。---可用于异步返回结果的顺序控制
用一个小程序说明join方法的使用技巧:
class Demo implements Runnable
{
public void run()
{
for(int x=1; x<100; x++)
{
System.out.println(Thread.currentThread().getName() + "..." + x);
}
}
}
public class JoinDemo
{
public static void main(String[] args) throws Exception
{
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t1.join();
t2.start();
for(int x=1; x<100; x++)
{
System.out.println(Thread.currentThread().getName() + "..." + x);
}
}
}
主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。这时候CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的只有t1了,只有当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。
join方法可以用于临时加入线程,一个线程在运算过程中,如果满足于条件,我们可以临时加入一个线程,让这个线程运算完,另外一个线程再继续运行。
如果将t1.join()和t2.start()位置互换,又会怎样呢?主线程开启了t1、t2,这时候CPU执行权还在主线程手里。当主线程碰到了t1.join(),释放执行权,处于冻结状态。活着的t1、t2都具备执行资格,这时候CPU便对t1和t2交替执行。主线程要等到t1结束才能活,至于t2结不结束,与主线程没有丝毫关系。如果t1结束了,t2还没结束,主线程就会和t2抢执行权执行。主线程碰到谁的join,它就等谁。也就是说,谁让它把执行权放出来,它就等谁死。至于谁去抢,它不管。
相关推荐
在本文中,我们将深入探讨Java多线程中的一个重要概念——`join`方法,并通过具体示例来理解其在确保线程间正确同步中的作用。 #### `join`方法的功能 `join`方法属于`Thread`类,它的主要功能是使得当前正在执行...
通过上述分析可以看出,`join`方法在控制多线程程序的执行流程方面起着关键作用。正确理解和使用`join`方法及`daemon`属性可以帮助开发者更高效地管理线程间的同步问题。希望本文能为读者提供有价值的信息,以便于更...
通过对比两种方法——一种使用多线程,另一种不使用——来实现相同的网络应用示例,即检测网络中多个IP地址对应主机的在线状态及其主机名,从而直观地展示多线程对性能的影响。 #### 三、示例程序:扫描网络计算机 ...
直接调用`run()`方法只会以单线程模式运行,不会实现多线程。 4. **线程状态**:Java线程有五种状态:新建、就绪、运行、阻塞和终止。了解这些状态有助于理解和调试多线程程序。 5. **线程同步**:为了防止多个...
《线程之道——深入解析Java中的Thread.join()》 在Java编程中,多线程是不可或缺的一部分,它能让我们在程序执行过程中同时处理多个任务,提高效率。而`Thread.join()`方法则是Java线程间协作的重要工具,它允许一...
1. **标准容器**:如vector、list、map等数据结构的使用方法及内部实现原理。 2. **算法**:如排序、查找等常见操作的标准算法介绍及其应用场景分析。 3. **迭代器**:不同类型的迭代器介绍以及如何高效地使用它们...
7 一个支持多线程的服务器框架 13. 8 代理服务器 13. 9 Telnet客户端 13. 10 UDP编程 13. 11 聊天室服务器端 13. 12 聊天室客户端 13. 13 FTP客户端 第14章 数据库 14. 1 连接各种...
在IT领域,尤其是在多线程编程与数据结构设计中,“生产者-消费者”模式是一种非常经典且实用的设计模式。此模式通常用于解决并发程序中的资源竞争问题,通过将任务分解为生产者(负责生成数据)和消费者(负责处理...
6. **线程编程**:Java提供了丰富的多线程支持,实例可能包括Thread类的使用、synchronized关键字、wait()、notify()、join()等线程控制方法。 7. **网络编程**:Java通过Socket进行网络通信,实例可能展示了客户端...
这是一个经典的多线程问题,模拟了两个线程——生产者和消费者,共享一个有限的资源池。生产者负责生成数据(增加资源),消费者负责消费数据(减少资源)。问题的关键在于协调生产者和消费者的动作,防止资源溢出或...
本文将详细解析如何使用C++11的标准线程语法来实现两个线程轮流打印整数,其中一个线程打印奇数,另一个线程打印偶数,同时涉及到线程同步的关键技术——互斥量和条件变量。 首先,为了确保线程安全,我们需要使用...
在本篇文章中,我们将深入分析Boost线程池库threadpool-0_2_5-src的源码,了解其设计原理和使用方法。 线程池的基本思想是预先创建一组线程,当有任务需要执行时,不是立即创建新的线程,而是从线程池中获取空闲...
以下是对“50个经典面试问答”的详细解析,涵盖多个IT领域,帮助你准备即将到来的面试。 1. **操作系统原理**: - 什么是进程和线程?它们的区别是什么? - 解释死锁的概念,并给出一个防止死锁的策略。 - 描述...
8.3.3使用isAlive()和join()等待子线程结束273 8.3.4设置线程优先级275 8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 8.4.4生产者-消费者问题实例284 8.5本...
CoreJava是Java编程语言的核心部分,它包含了Java语言的基础语法、面向对象特性、集合框架、多线程、网络编程、输入/输出处理、异常处理等多个重要领域的知识点。这些概念和技术构成了Java开发人员必备的基础技能,...
3. 多线程(必会):理解线程的生命周期,创建线程的方式(实现Runnable、Thread类),掌握synchronized关键字、wait()、notify()和notifyAll()方法的使用,理解死锁和线程间的通信,知道如何使用ThreadLocal解决线程...
- **解析**: 通过设置打印机为网络共享模式,可以在局域网内让多台计算机访问并使用同一台打印机,提高资源利用率。 #### 7. 表中索引创建 - **知识点**: 在数据库中,通过`INDEX`命令创建索引。 - **解析**: 索引...
这一章会详细解析它们的用法和特点。 第9章:泛型 泛型引入了类型参数的概念,增强了代码的类型安全性和重用性。本章会讲解泛型的定义、限制和使用泛型集合。 第10章:多线程 多线程是并发编程的基础,Java提供了...
`join()`方法用于等待当前线程结束,而`notify()`方法用于唤醒正在等待的对象锁的线程,并非直接影响线程状态。因此,选项D是错误的。 2. **Web窗体页模型** - **知识点**:ASP.NET中页面模型的概念。 - **详细...