java自带的monitor机制,其实是一种解决同步的机制。
当遇到并发情况时,多个线程同时访问一个对象,那么我们为了数据的一致性,只能给其中的一个线程发放通行证(我们姑且将monitor描述成一个对象,线程获取通行证其实等价于线程获得这个monitor对象,当该线程执行完它的工作需要将monitor对象归还 然后其他等待的线程则有机会获得monitor对象 执行自己的逻辑,那么当一个线程访问一个对象时发现它的monitor对象被其他对象占用了,它们在"Entry set"中排好队等待获取monitor对象)。
当然这个持有monitor对象通行证的线程也可以选择暂时放弃当前的使用权(singal机制/notify、notifyAll),去等待某个条件变量(例如:java.lang.Object.wait()),当条件成立后,当前进程就会通知这个正在等待该条件变量的线程可以去重新获取使用权限了。
那么什么是条件变量?
条件变量通常是一个线程作为使自己等待,直到一个涉及共享数据的条件表达式达到特定的状态。当另外的协作线程通知共享数据的状态已经发生变化,调度器就唤醒在该条件变量上挂起的线程。于是新唤醒的线程重新对它的条件表达式进行求值,如果共享数据已达到合适状态,就恢复处理。
相比于C++,java无需自己封装条件变量类,java的根类Object提供了wait/notify/notifyAll方法给开发者,非常容易使用。
综上所述:java monitor从两个方面来支持线程之间的同步,即:互斥执行与协作。java使用对象锁(使用synchronized获得对象锁)保证工作在共享的数据集上的线程互斥执行。另一方面,使用wait/notify/notifyAll方法来协同不同线程之间的工作。这些方法都在java.lang.Object中定义,会被所有的java对象自动继承。
本质上,java的Object对象本身就是一个监视者对象,java对于这样一个典型并发设计模式做了内建的支持。不过java中我们已经看不到像C++中的区域锁和条件变量了。
如下图,线程如果获得监视锁成功,将成为监视者对象的拥有者。在任何一个时刻,监视者对象只属于一个活动线程,这个活动线程可以通过调用wait方法自动释放监视锁,进入等待状态。
相关推荐
本资源“java concurrent 精简源码”着重关注Java并发库(java.util.concurrent)的核心概念,包括阻塞队列和线程管理。下面将详细阐述这些知识点。 1. **Java并发库(java.util.concurrent)** Java并发库是Java ...
Java Concurrent in practice (animated)
Java并发包(java.concurrent)是Java平台中处理多线程编程的核心工具包,它提供了丰富的类和接口,使得开发者能够高效、安全地编写多线程程序。这个包的设计目标是提高并发性能,减少同步代码的复杂性,并提供高级...
JAVA的CONCURRENT用法详解.pdf
首先,`java.concurrent`包是Java标准库的一部分,提供了并发编程的支持,包括线程池、同步机制、并发容器等。在生成PDF的过程中,如果数据处理或转换工作量较大,可以利用并发处理来提高性能。例如,通过...
资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 封底 Java多线程无处不在,...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
java concurrent包分类结构图
Java并发编程是Java开发中的重要领域,它涉及多线程、同步机制以及高效并发工具的使用。在Java 1.5及以后的版本中,Java引入了丰富的并发工具来提升多线程环境下的程序性能和可维护性。 1. Java并发编程机制 在Java...
其中,`java.util.concurrent`包是Java 5引入的一个重要特性,它提供了高级并发机制的支持,使得开发者能够更高效地编写并发程序。 #### 二、Concurrent API的核心组件 `java.util.concurrent`包包含了多个核心...
java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大...
《Java并发编程实战》是Java开发者必读的经典之作,它深入浅出地讲解了Java并发编程的核心知识和实践技巧。这本书不仅涵盖了理论基础,还提供了大量实用的代码示例,帮助开发者理解并解决多线程环境下的各种问题。 ...
EBS java concurrent program的实现
Java的并发库提供了一系列工具和API,如`java.util.concurrent`包,帮助开发者有效地管理并发任务。本书主要涵盖以下几个方面: 1. **线程基础**:书中首先介绍了线程的基本概念,包括如何创建和管理线程,以及线程...
JUC使用指导手册 http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html 中文译文
- **ExecutorService**:这是Java并发编程中最核心的接口之一,它提供了更高级的线程池管理功能。 - **Future与Callable**:`Future`代表异步计算的结果,`Callable`是一个可以返回结果的接口,常用于与`...
JavaConcurrent是Java平台提供的高级并发API,它使得多线程编程更加高效和安全。本资料集合了Java面试中与多线程相关的常见问题及解答,旨在帮助求职者充分准备这一关键领域的知识。 1. **线程的概念与创建** - ...
为了更好地支持并发编程,Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一个包含了许多中级并发支持类的集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java ...