与并发有关的设计模式.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
? ? 与并发有关的设计模式 ? ? 主要参考《实战java高并发程序设计》 一、?单例设计模式 单例设计模式是一种对象创建模式,用于产生一个对象得具体实例,它可以确保系统中一个类只产生一个实例。 这样做得好处:1.对于频繁使用的对象,可以省略new操作花费的时间。2. 由于new操作次数的减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。 单例实际模式与并发关系不大,但在多线程环境中会用到单例设计模式,所以需要实现一种高效的单例实现。 1. ”饿汉式“,第一次调用这个类时就会创建这个类的对象,显得很着急,所以称为”饿汉式“。是线程安全的,也很简单。 public class Singleton { public static int status = 1; private Singleton(){ System.out.println(Singleton is created); } private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } } 优点:简单,并发模式下性能高。 缺点:类中有其他静态成员被调用,即使getInstance()方法没被调用,由于类被加载,instance被创建,也会执行Singleton()方法。 2. ”懒汉式“,延迟加载,只有在调用getInstance()时,创建instance. public class LazySingleton { public static int status =1; private LazySingleton() { System.out.println(LazySingleton is created); } private static LazySingleton instance = null; public static synchronized LazySingleton getInstance() { if (instance == null) instance = new LazySingleton(); return instance; } } 优点:只有在调用getInstance()时,才会创建instance. 缺点:加锁才能保证线程安全,在并发环境下,可能对性能造成影响。 3. 4. 结合1,2的优点,克服1,2的缺点,使用内部类的方式,只有在调用getInstance()时才会创建instance,而且不加锁也可以保证线程安全。 public class StaticSingleton { private StaticSingleton(){ System.out.println(StaticSingleton is created); } // 内部类没被调用前不会被加载 private static class SingletonHolder{ private static StaticSingleton instance = new StaticSingleton(); } public static StaticSingleton getInstance(){ return SingletonHolder.instance; } } ?二、不变模式 只所以有同步问题,是因为不同线程在操作同一资源时,可能同时修改它,造成线程安全问题。如果一个对象,不可修改,就不会出现同步问题了。 不变模式和只读属性有一定的区别。 不变模式的应用场景: 实现不变模式的4个要点: 在JDK中,不变模式的应用非常广泛。其中,最为典型的就是java.lang.String类。此外,所有的元数据类、包装类都是使用不变模式实现的。? 三、生产者-消费者模式 生产者-消费者是一个经典的多线程设计模式,在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者则负责具体处理生产者提交的任务。生产者和消费者之间则通过共享内存缓冲区进行通信。 生产者-消费者模式避免了生产者和消费者直接通信,从而将生产者和消费者进行解耦。生产者不需要直到消费者的存在,消费者也不需要直到生产者的存在。同时,由于内存缓存曲的存在,允许生产者和

文档评论(0)

科技之佳文库 + 关注
官方认证
文档贡献者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地浙江
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档