- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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类。此外,所有的元数据类、包装类都是使用不变模式实现的。?
三、生产者-消费者模式
生产者-消费者是一个经典的多线程设计模式,在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者则负责具体处理生产者提交的任务。生产者和消费者之间则通过共享内存缓冲区进行通信。
生产者-消费者模式避免了生产者和消费者直接通信,从而将生产者和消费者进行解耦。生产者不需要直到消费者的存在,消费者也不需要直到生产者的存在。同时,由于内存缓存曲的存在,允许生产者和
您可能关注的文档
- 【App设计】互联网+商业计划书.docx
- 【HDL系列】Kogge-Stone加法器原理与设计.docx
- 【Linux内核设计与实现】Linux内核简介.docx
- 【Mybatis源码阅读】mybatis中的设计模式.docx
- 【Python实例分析】批量生成海报-自动添加姓名和二维码.docx
- 【Redis】《Redis设计与实现》读书笔记.docx
- 【RT-Thread-开源作品秀】基于-RT-Thread-的数码小精灵设计与实现.docx
- 【RTOS实时操作系统】IA32-多任务调度与-RTOS-微内核设计开发.docx
- 【SEDA异步框架】【四】异步框架总体设计与实现.docx
- 【Spring】设计模式概述.docx
文档评论(0)