线程管理(六)等待线程的终结
在某些情况下,我们需要等待线程的终结。例如,我们可能会遇到程序在执行前需要初始化资源。在执行剩下的代码之前,我们需要等待线程完成初始化任务。
为达此目的, 我们使用Thread 类的join() 方法。当前线程调用某个线程的这个方法时,它会暂停当前线程,直到被调用线程执行完成。
在这个指南中, 我们将学习用初始化例子来使用这个方法。
准备
指南中的例子是使用Eclipse IDE 来实现的。如果你使用Eclipse 或者其他的IDE,例如NetBeans, 打开并创建一个新的java项目。
怎么做呢…
按照这些步骤来实现下面的例子::
1. 创建一个类名为 DataSourcesLoader 并一定实现Runnable接口。
2. 实现run()方法。 它写信息来表明它开始运行,然后睡眠4秒,最后再写信息表明它结束运行。
3. 创建一个类名为 NetworkConnectionsLoader 并一定要Runnable接口。实现run()方法。它将与DataSourcesLoader类的run()方法一样,但是它会睡眠6秒。
4. 现在, 创建一个类名为 Main,包含 main()方法。
DataSourcesLoader dsLoader = new DataSourcesLoader(); Thread thread1 = new Thread(dsLoader, quot;DataSourceThread quot;);
8. 2个线程都使用 join() 方法等待终结。 此方法可以抛出InterruptedException 异常, 所以要包含捕捉代码。
它是怎么工作的…
当你运行这个程序时,你可以发现2个线程对象都开始他们的执行。首先, DataSourcesLoader 结束它的运行。然后, NetworkConnectionsLoader 类结束它的运行,同时,主线程对象继续运行并写下了最后的信息。
更多
Java 提供2种形式的 join() 方法:
join (long milliseconds) join (long milliseconds, long nanos)第一种join() 方法, 这方法让调用线程等待特定的毫秒数。例如,如果thread1对象使用代码thread2.join(1000), 那么线程 thread1暂停运行,直到以下其中一个条件发生:
thread2 结束运行 1000 毫秒过去了当其中一个条件为真时,join() 方法返回。
第二个版本的 join() 方法和第一个很像,只不过它接收一个毫秒数和一个纳秒数作为参数。
深入理解线程通信(上) 开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。 或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。
深入理解线程通信(下) 开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。 或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。
深入理解线程通信(中) 开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。 或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。
wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁; sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常; notify():唤醒一个处于等待状态的线程,...
ali清英 方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
相关文章
- java线程join方法
- 线程通信
- 线上问题:线程池拒绝策略「建议收藏」
- Python线程管理
- 同步锁-线程安全问题解决方案「建议收藏」
- 8.启动一个线程 / 中断一个线程 / 等待一个线程
- 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
- java线程的创建和管理(二)
- Python线程的创建、执行和管理以及注意事项
- 从使用到原理学习Java线程池详解编程语言
- MySQL连接池管理:实现线程池优化性能(mysql连接池线程池)
- 存储Linux线程局部存储:实现高效率并发(linux线程局部)
- Linux中超时机制的线程管理(linux线程超时)
- Linux线程栈:管理复杂任务的最佳方式(linux线程栈)
- 管理实现Arm Linux系统线程管理的有效方法(armlinux线程)
- 多线程状态及线程池管理详解编程语言
- 管理Linux线程内存管理技术探索(linux线程内存)
- Linux C 实现的线程池管理技术(linuxc线程池)
- MySQL线程池:实现更高效的连接管理(mysql线程池设置)
- MySQL中线程占用优化查询和管理资源的重要方法(mysql中占用线程)
- Redis操作是否线程安全(操作redis线程安全吗)