通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线
程downloadThread将该图片下载完毕。如果图片还没有下载完,displayThread可以暂停,当downloadThread完成了任
务后,再通知displayThread“图片准备完毕,可以显示了”,这时,displayThread继续执行。
以上逻辑简单的说就是:如果条件不满足,则等待。当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。例如:
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait()。
在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A:
synchronized(obj) {
condition = true;
obj.notify();
}
需要注意的概念是:
# 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj)
{…} 代码段内。
#
调用obj.wait()后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj) {…}
代码段内唤醒A。
# 当obj.wait()方法返回后,线程A需要再次获得obj锁,才能继续执行。
#
如果A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,A2,A3中的一个(具体哪一个由JVM决定)。
#
obj.notifyAll()则能全部唤醒A1,A2,A3,但是要继续执行obj.wait()的下一条语句,必须获得obj锁,因此,A1,A2,A3只有一个有机会获得锁继续执行,例如A1,其余的需要等待A1释放obj锁之后才能继续执行。
#
当B调用obj.notify/notifyAll的时候,B正持有obj锁,因此,A1,A2,A3虽被唤醒,但是仍无法获得obj锁。直到B退出synchronized块,释放obj锁后,A1,A2,A3中的一个才有机会获得锁继续执行。
分享到:
相关推荐
书中包含Java线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的...
本资料包含的源代码将深入探讨各种多线程设计模式,帮助开发者理解和应用这些模式。 一、线程基础 在Java中,可以通过实现`Runnable`接口或继承`Thread`类来创建线程。`Runnable`接口允许你将任务逻辑封装在一个类...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
《图解Java多线程设计模式》是由日本著名技术作家结城浩编著的一本深入探讨Java多线程编程的经典著作。这本书以清晰易懂的方式,结合丰富的图表和实例,全面解析了Java多线程开发中的关键概念、设计模式以及实践技巧...
Java多线程设计模式是Java开发中的重要领域,它涉及到如何高效、安全地利用系统资源进行并发处理。在这个主题中,我们将深入探讨单线程、生产者与消费者模型以及Java中实现多线程的各种方法。 首先,单线程是程序...
Java多线程设计模式是Java开发中不可或缺的一部分,它涉及到并发编程的核心概念和技术。在现代计算机系统中,多线程并行处理任务已经成为提升效率的关键。本篇文章将深入探讨Java多线程设计模式,帮助你更好地理解和...
《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...
本书《JAVA多线程设计模式》针对Java语言的多线程编程进行深入讲解,采用易于理解的方式介绍了与Java线程相关的多个设计模式,并通过实例程序与UML图示辅助阐述。书中的关键代码片段都有标注,易于读者理解与学习,...
在IT领域,多线程设计模式是解决并发问题的关键技术之一。它允许程序同时执行多个任务,提升系统效率,尤其在资源丰富的多核处理器环境下,更显得尤为重要。本资料主要探讨的是如何在Java环境中利用多线程设计模式来...
在探索多线程和设计模式的同时,还要关注线程间的通信(如使用`wait()`、`notify()`、`notifyAll()`等)、同步机制(如`synchronized`关键字、`Lock`接口等)、线程池的使用(`ExecutorService`、`...
此外,线程间通信(如wait/notify、生产者消费者模型)也是多线程编程中的重要概念。 高并发是指系统在同一时间能处理大量并发请求的能力。在互联网服务中,高并发处理能力直接影响到系统的可扩展性和性能。为了...
了解并掌握生产者消费者模型和`wait-notify`机制对于编写高效的多线程Java应用程序至关重要,尤其是在处理并发任务和大数据流时。通过实践和理解这些概念,开发者可以更好地设计和实现线程安全、性能优良的系统。
Java多线程设计模式是程序开发中的重要领域,特别是在服务器端和高性能应用中,多线程的使用可以显著提升系统的并行处理能力。本书由知名技术作者结城浩撰写,于2005年出版,得到了广泛的好评,被誉为“好书”。这...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了...《Java 多线程设计模式》一书的源代码应该涵盖了这些知识点的具体实现,通过阅读和实践,可以深入理解多线程编程和设计模式的精髓。