`
sunnylocus
  • 浏览: 876681 次
  • 性别: Icon_minigender_1
  • 来自: 美国图森
社区版块
存档分类
最新评论

理解多线程设计模式

    博客分类:
  • Java
阅读更多


多线程设计模式:
1.Single Threaded Execution Pattern
   [同一时刻只允许一个线程操作]

   
   比喻:三个挑水的和尚,只能同一时间一个人过桥,不然都掉河里喂鱼了。
   总结:在多个线程同时要访问的方法上加上synchronized关键字。


2.Immutable Pattern
  
[变量赋值一次后只能读取,不能改变。]
   比喻:一夫多妻制,多个妻子共享一个丈夫。一旦赋值,任何一个妻子不能更改共享的 husband为其它人。
   总结:将多线程共享的变量用final关键字修饰。


3.Guarded Suspension Pattern
  
[要等到我准备好哦,没准备好就在门口等着,准备好了再叫你。]
   比喻:

        GG:小伙子去MM家,敲门...
        MM:我在换衣服,稍等。
        GG:等待 【调用wait()方法挂起自己的线程】
        MM:换好了,进来吧 【调用notify()或着notifyAll()方法通知GG】
   总结:判断某个条件是否为真,如果条件成立则继续执行一步,如果条件不成立用wait()方法挂起当前线程,条件为真后由另一个线程用notify()或 着notifyAll()方法唤醒挂起的线程。


4.Balking Pattern
   [有人在做了?哈哈,太好了,我就不过去了!]

   比喻:饭店里我想好了要点的菜后,高高的举起手示意服务生过来,一个服务生准备过去的时候看到另外一个服务生已经过去了,哈哈已经有人过去了我就不过去了。
   总结:设置一个volatile的共享变量,多个线程进入同一方法时,判断变量的值是否为真,如果为真说明有人已经在做这个工作了,线程返回,反之将变量赋值为真并执行。
  
5.Producer-Consumer Pattern
   [生产-消费者,你生产蛋榚我来吃。]

   比喻(1):一群猪围着猪食槽的一头,塞进几块玉米饼后,群猪争先恐后从食槽头抢,谁抢到谁吃。
   比喻(2):一群猪围着猪食槽的头和尾,塞进几块玉米饼后,群猪争先恐后从食槽头和食槽尾抢,谁抢到谁吃。
   总结:<1>生产者将生产出来的东西add(E e)到一个Queue,然后唤醒正在从Queue等东西的线程,用poll()方法从队列的头获取到东西,当Queue里的东西被取完,取东西的线程再次被挂起。
           <2>生产者将生产出来的东西放入(方法很多,有add(E e)、addFirst(E e)、addLast(E e)等)一个Deque,然后唤醒正在从Queue等东西的线程,线程从Deque的头和尾取东西,当Deque里的东西被取完,取东西的线程再次被挂起。


6.Read-Write Lock Pattern
   [学生抄的时候,不允许老师擦掉黑板上的字。]

   比喻:老师在黑板上写了些字,下面的同学在拼命的抄,过会儿老师要写些新的字,写新字要擦掉原来的那些,问:都写完了么?如果都回答写完了,就擦掉原来的字写新的,如果还有一个回答没写完,就等待最后一个同学抄完再写。
   总结:Jdk1.5及以上有专门的读写锁实现
       
java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
       java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
7.Thread-Per-Message Pattern 
   [一任务一线程]

   总结:一个客人一个妞服务,好是好,可是天朝扫黄太厉害,现在狼多肉少哇,用线程池吧,轮流服务。


8.Worker Thread Pattern
   [同Producer-Consumer Pattern]


9.Future Pattern
   [给您一张提货单,下午来取。]

   比喻:
       李刚:大钞票一摔,来只大蛋榚!
       店员:对不起没这么大的,但现做,给您张单子,下午xx点来取。
       李刚:取货单??,上面都写了些啥?

            订单号:SB01
             客户名:李刚
             已付款:250
          取货时间:PM2:50
  
   总结:调用某个方法时,这个方法可能需要请求其它系统,这个过程比较耗时,为了提高客户的体验需要方法立即返回,过一段时间再查询结果。
          在程序里声明一个Hashmap,Key保存订单号,Value保存生产出的蛋榚,然后根据订单号取得对应的蛋榚。


10.Two-Phase Termination Pattern
   [玩具收拾好,睡觉去]
   比喻:小孩子在玩具,到点了妈妈喊:别玩了,睡觉去!
   总结:一个线程在while(!isInterrupted()){..}循环中执行,另外一个线程判断某个条件达到后获得准备被结束线程的句柄,调用
interrupt()
        设置线程的中断状态。

11.Thread-Specific Storage Pattern
   [线程私有物品保管箱]

    总结:一个方法可能会被同一个线程访问多次,如果每访问一次就要声明一个数据库连接的Connection变量,则对程序的性能有影响。将Connection放在ThreadLocal里,这样每次访问就不必再产生一个Connection,同一个线程对应同一个Connection.


12.Active Object[]

 

 

 

 

11
0
分享到:
评论
2 楼 sunnylocus 2011-10-13  
dominic6988 写道
写的生动形像,楼主加油在接在厉。

恩,多谢!
1 楼 dominic6988 2011-10-13  
写的生动形像,楼主加油在接在厉。

相关推荐

    java多线程设计模式详解(PDF及源码)

    书中包含Java线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...

    Java多线程设计模式源代码

    本资料包含的源代码将深入探讨各种多线程设计模式,帮助开发者理解和应用这些模式。 一、线程基础 在Java中,可以通过实现`Runnable`接口或继承`Thread`类来创建线程。`Runnable`接口允许你将任务逻辑封装在一个类...

    java多线程设计模式详解(PDF及源码).rar

    10. 实践案例:压缩包中的源码部分可能会包含一些实际应用场景的示例,如Web服务器的线程模型、定时任务的实现等,通过分析这些代码,你可以更直观地理解多线程设计模式的运用。 这个资料集可以帮助你深入理解Java...

    java多线程设计模式源码

    Java多线程设计模式是构建高并发、高性能应用的关键技术之一。这些模式通过优化资源利用、提高程序可读性和可维护性,使并发编程更加高效和安全。以下将详细讲解标题和描述中涉及的一些核心知识点: 1. **线程池...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    以上就是Java多线程设计模式的一些关键知识点,理解并熟练运用这些模式,将有助于编写出高效、稳定、易于维护的多线程程序。通过阅读《java多线程设计模式》这本书,你可以深入理解这些概念,并学习到更多实际应用的...

    java多线程设计模式详解.pdf

    标题“java多线程设计模式详解.pdf”中提到的知识点是关于Java多线程编程中设计模式的应用。Java多线程是并发编程的重要组成部分,设计模式则是软件工程中用于解决特定问题的最佳实践。将两者结合起来,意味着此文件...

    《Java多线程设计模式》附源码中文教程 (PDF)

    书中包含Java线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的精华...

    java多线程设计模式详解(PDF及源码).zip

    Java多线程设计模式是...通过阅读“java多线程设计模式详解(PDF及源码)”的资料,我们可以深入了解这些知识点,并通过提供的源码加深理解,学习如何在实际项目中应用多线程设计模式,提高程序的并发性能和可维护性。

    Java 多线程编程中的设计模式~

    ### 二、Java多线程设计模式的重要性 在Java中,多线程设计模式的重要性不言而喻。由于多线程环境的复杂性,如果不采用合适的设计模式,很容易导致死锁、数据不一致、竞态条件等并发问题。因此,熟悉并运用这些设计...

    JAVA设计模式与JAVA多线程设计模式详解

    总之,理解和掌握Java设计模式和多线程设计模式对于提升软件开发的效率和质量至关重要。通过实践和不断学习,你将能够更自如地应对各种复杂的设计挑战,编写出优雅、高效且易于维护的代码。在阅读提供的"JAVA设计...

    Java多线程设计模式(带源码)

    本资源提供了详细的Java多线程设计模式的解析,包括源码分析,帮助开发者深入理解并熟练应用这些模式。 在多线程环境中,设计模式是解决常见问题的最佳实践,它们可以帮助开发者创建高效、可维护的并发代码。以下是...

    JAVA多线程设计模式

    本书《JAVA多线程设计模式》针对Java语言的多线程编程进行深入讲解,采用易于理解的方式介绍了与Java线程相关的多个设计模式,并通过实例程序与UML图示辅助阐述。书中的关键代码片段都有标注,易于读者理解与学习,...

    JAVA多线程设计模式_中国铁道出版社_源码

    JAVA多线程设计模式_中国铁道出版社 本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计...

    java多线程设计模式

    本文将深入探讨Java多线程设计模式及其应用,帮助开发者理解和掌握这一重要技术。 首先,理解Java多线程的基础是必要的。Java通过`Thread`类和`Runnable`接口提供对多线程的支持。开发者可以创建`Thread`对象,或者...

    Java多线程设计模式

    Java多线程设计模式是程序开发中的重要领域,特别是在服务器端和高性能应用中,多线程的使用可以显著提升系统的并行处理能力。本书由知名技术作者结城浩撰写,于2005年出版,得到了广泛的好评,被誉为“好书”。这...

    java多线程设计模式详解

    Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境下高效、安全地组织代码...阅读提供的"java多线程设计模式详解.pdf"和"Java多线程设计模式源码"文件,将能更深入地理解这些模式的实际运用。

Global site tag (gtag.js) - Google Analytics