`

Monitor Object设计模式

 
阅读更多

   这我们得实际开发当中,当遇到并发的应用时,我们总是需要设计一个这样的对象,该对象在多线程下被调用,而调用的这些方法都会改变对象自身的状态,为了避免竞争条件(race condition)的产生,对于这类对象的设计,需要考虑一下问题:

  •   1、在任一时间内,只有唯一的公共方法被唯一的线程调用。
  •   2、对于对象的调用者来说如果总是需要调用前加锁,调用结束后去锁,编程将会变得困难重重,正确的做法是该对象确保任何针对它的方法请求的同步被透明化,进而不需要调用者介入。
  •   3、如果一个对象的方法执行过程中,由于某些条件不能满足而阻塞,应该允许其他的客户端线程的方法调用可以访问该对象。例如:生产者消费者模式,当消费者从任务队列中无法获取任务时,将会调用wait()方法阻塞自己,等待其他线程notify自己。

   Monitor Object模式:将被客户端线程并发访问的对象定义为一个monitor对象。客户端线程只能通过monitor对象的同步方法使用monitor对象定义的服务。为了防止陷入竞争条件,任一时刻只能有一个同步方法被调用执行。每一个monitor对象包含一个monitor锁。被同步方法用于串行访问对象的状态和方法。此外,同步方法可以根据一个或多个与monitor对象相关的monitor conditions来决定在任何情况下挂起或恢复它们的执行。

  Monitor Object 模式中,主要有四种类型的参与者:

  • 1、监视者对象(Monitor Object):负责定义公共的接口方法,这些公共的接口方法将会在多线程的环境下执行。
  • 2、同步方法:监视者对象中定义。为了防止竞争条件的产生,无论是多线程并发调用监视者对象方法,还是监视者对象拥有多个同步方法,在同一时间内,只能有监视者对象的一个同步方法被一个线程调用执行。
  • 3、监视锁(Monitor Lock):每个监视者对象都会拥有一把监视锁
  • 4、监视条件(Monitor condition):同步方法通过监视锁和监视条件来决定方法是否能够被执行、是否需要阻塞、是否重新执行。

执行序列图:



 1、同步方法的调用和串行化。当客户端调用监视者的同步方法时需要获取其监视锁。当该监视者对象有其他同步方法正在执行,获取监视锁就不成功。此时,客户端线程将会被阻塞直到获取监视锁。当客户端线程获取到监视锁,将进入临界区,执行方法中的逻辑,一旦同步方法执行结束,监视锁将会被释放,目的是使其他的线程有机会使用监视者对象的同步方法服务。

2、同步方法挂起。如果调用同步方法的客户线程必须挂起或者有其他不能继续执行的原因,它能够在一个监视条件上等待,这将导致该客户线程暂时释放监视锁,并挂起在监事条件上。

3、监视条件通知。一个客户线程能有通知一个监视条件,目的是让一个先前挂起在一个监视条件上的线程恢复运行。

4、同步方法线程恢复。一旦一个先前被挂起在一个监视条件上的同步方法线程获取通知,它将会继续在先前等待的监视条件的电上执行。在被通知线程被允许恢复执行同步方法之前,监视锁将自动被获取。

  • 大小: 60.7 KB
分享到:
评论

相关推荐

    Monitor-Object设计模式入手-探索Java同步机制-二.ppt

    Monitor Object设计模式 Monitor Object设计模式是一种特殊的设计模式,用于解决并发应用编程中的竞争条件问题。该模式将被客户线程并发访问的对象定义为一个监视者对象,客户线程仅仅通过监视者对象的同步方法才能...

    Java Monitor Pattern设计模式.pdf

    Monitor Object的设计模式通常用于解决多个线程对共享资源的并发访问。在Java中,当一个线程进入一个由synchronized修饰的方法或代码块时,它会自动获取到对象的锁,然后其他线程试图进入同一锁定区域时会被阻塞,...

    Java Monitor Pattern设计模式.docx

    Java Monitor Pattern设计模式是用于解决多线程环境下的并发访问问题的一种经典设计模式。它基于监视器对象(Monitor Object)的概念,确保在任一时间点只有一个线程能够访问特定的共享资源,从而实现线程安全。 **...

    Java Monitor Pattern设计模式

    首先,让我们回顾一下`Monitor Object`设计模式。在C语言中,监视器模式通常通过`mutex`(互斥量)和条件变量来实现,确保同一时间只有一个线程能够访问特定的代码块。在Java中,这种机制被封装在`synchronized`...

    visualize-object-model-3d 开线程显示3D点云

    在IT领域,尤其是在计算机图形学和可视化技术中,"visualize-object-model-3d 开线程显示3D点云"这个主题涉及到多个重要的知识点。3D点云是一种数据结构,它由大量的三维坐标点组成,通常用于表示物体或场景的表面。...

    访问者模式

    访问者模式(Visitor Pattern)是一种常用的行为设计模式,其核心在于分离数据结构与作用于该数据结构上的操作。这意味着,当数据结构保持不变而操作发生变化时,可以通过引入新的访问者类来扩展系统的功能,而无需...

    javascript设计模式 – 访问者模式原理与用法实例分析

    访问者模式是一种面向对象的设计模式,它允许在不修改对象结构的情况下向对象结构中的元素添加新的操作。在JavaScript中,这种模式尤其有用,因为它提供了在代码中增加新功能的灵活性,而无需更改现有的类结构。 ...

    扩展性设计,Observer,Events

    在IT行业中,扩展性和设计模式是构建可维护、可扩展软件系统的重要基石。"扩展性设计"是指在软件设计时考虑到未来可能的需求变化,确保系统能够轻松地添加新功能或处理更大的负载。Observer模式和事件(Events)是两...

    C#线程锁介绍源码

    public static object locker = new object(); public static void AddRecord() { lock (locker) { // 添加过程 dictionary.Add(".", DateTime.Now); } } public static void DeleteRecord() { lock (locker...

    c#高级进阶资料

    本篇将深入探讨C#的高级进阶知识,包括泛型、反射、LINQ、设计模式以及多线程技术,并浅析如何进行百万级数据库优化。 **一、泛型** 泛型是C#中的一个重要特性,它允许我们在不指定具体数据类型的情况下定义方法、...

    go-patterns.pdf

    Go语言设计模式涵盖了在面向对象编程中遇到的典型问题的解决方案。这些模式大致可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式关注于对象的创建机制,旨在提升代码的灵活性和可复用性。在Go中,...

    .NET 上机 面试题

    这些题目可能涵盖了一系列与.NET相关的主题,包括但不限于C#编程、ASP.NET web开发、ADO.NET数据库交互、设计模式、多线程、异常处理、性能优化、框架使用等。 首先,C#编程是.NET的基础,面试中可能会涉及面向对象...

    C#入门必看实力程序100个

    18. **设计模式**:可能包含一些常见的设计模式示例,如工厂模式、单例模式、观察者模式等。 19. **图形用户界面(GUI)编程**:通过Windows Forms或WPF创建交互式的桌面应用。 20. **.NET框架与.NET Core**:了解...

    NET面试题目

    - 对象池(Object Pool)的设计模式及其在提高性能中的作用。 4. **Asynchronous Programming**: - 异步编程模型,包括基于事件的异步模式(EAP)、基于任务的异步模式(TAP)。 - async/await关键字的使用,...

    WPF MVVM实现简易登录,页面跳转等功能

    在本文中,我们将深入探讨如何使用C#语言和Windows Presentation Foundation(WPF)框架,结合Model-View-ViewModel(MVVM)设计模式来实现一个简易的登录功能,并且包括页面跳转等操作。WPF是.NET Framework的一个...

    Redis中统计各种数据大小的方法

    每次迭代,代码会检查每个键是否与定义的模式匹配,如果匹配成功,则调用 `DEBUG OBJECT` 获取序列化长度并累加到对应模式的结果中。最后,通过 `var_dump($result)` 输出各个模式匹配的键的总序列化长度。 然而,`...

    NET软件工程师试题1.pdf

    4. 设计模式:文档中提到“Factory”、“AbstractFactory”、“Singleton”和“Builder”,这些都是常见的软件设计模式。工厂模式(Factory)用于创建对象的接口,抽象工厂模式(AbstractFactory)提供了一个创建一...

    net面试题全面总结

    在.NET领域,面试通常会涵盖多个关键知识点,包括但不限于基础语法、面向对象编程、框架理解、设计模式、数据库操作、网络编程、并发处理、异常处理、性能优化等。以下是对这些核心领域的详细解读: 1. **基础语法*...

    os生产者消费者实验(c#)

    例如,`Monitor`类可以用来实现监视器模式,通过`Monitor.Enter()`和`Monitor.Exit()`方法控制对缓冲区的访问,确保同一时间只有一个线程能够访问。同时,`Monitor.Wait()`和`Monitor.Pulse()`方法可以用来实现线程...

    南京C#面试题目集合

    - 工厂模式、单例模式、观察者模式等常见设计模式的理解和实现。 - 面向接口编程:如何利用接口实现松耦合和可扩展性。 6. 数据库: - SQL语言:掌握基本的SQL查询、更新、删除和插入操作。 - ORM(Object-...

Global site tag (gtag.js) - Google Analytics