当前位置: 首页 > news >正文

网站规划与开发技术属于什么大类做搞笑图片的网站

网站规划与开发技术属于什么大类,做搞笑图片的网站,体育新闻最新消息,上海美术设计公司文章目录 单例模式概述饿汉模式懒汉模式单线程版懒汉单例多线程版枚举实现单例 单例模式概述 单例模式是设计模式中的一种,其作用能保证某个类在程序中只存在唯一一份实例,而不会创建多份实例。单例模式具体的实现方式, 分成 “饿汉” 和 “懒汉” 两种.。饿汉模式中的饿不并不… 文章目录 单例模式概述饿汉模式懒汉模式单线程版懒汉单例多线程版枚举实现单例 单例模式概述 单例模式是设计模式中的一种,其作用能保证某个类在程序中只存在唯一一份实例,而不会创建多份实例。单例模式具体的实现方式, 分成 “饿汉” 和 “懒汉” 两种.。饿汉模式中的饿不并不是真饿了,而是说提前把单例类更创建好。懒汉模式中的懒则是当需要使用到单例类的时候才创建单例对象。这就类似于,每次吃饭的时候,已经提前把碗洗了有碗用,这就是饿汉。懒汉则是要用碗赶紧去把碗洗了。单例模式中的单例类有且只有一份,static修饰的成员变量是属于类的,也是只有一份,所以我们使用static修饰的成员变量保存 到实例对象的引用变量。 饿汉模式 在单例模式中一个类只有一个实例对象,所以避免外部通过构造方法创建对象,所以需要才构造方法私有,防止创建出多个对象。又因为我们是使用static来保存实例对象的引用,所以需要提供一个静态方法获取唯一的对象。 示例代码 public class HungrySingleton {/*** 类加载的时候创建出HungrySingleton对象,并用静态差成员变量保存。*/private static HungrySingleton singleton new HungrySingleton();private HungrySingleton() {}/*** 提供静态方法获取单例* return*/public static HungrySingleton getSingleton() {return singleton;} }上述的代码多线程环境下依旧是安全的,因为 getSingleton()方法中的return语句只涉及到读而不涉及修改。 懒汉模式单线程版 懒汉模式和饿汉模式相比就是创建实例的时机不一样,懒汉不是在类加载的时候创建而是在需要使用的时候创建。 示例代码 public class SlackerSingleton {private static SlackerSingleton singleton null;private SlackerSingleton() {}/*** 提供静态方法获取单例** return*/public static SlackerSingleton getSingleton() {//需要使用的时候创建对象if (singleton null) {singleton new SlackerSingleton();//真正创建的时机,创建好了,后续是直接返回。}return singleton;} }多线程的环境下,当t1线程进行比较singleton是否为空时,比较完之后t1线程还没有创建实例。此时t2线程立马进来再次判断此时singleton依旧为空,导致t2线程也进行new操作,最终导致创建了多份实例。造成线程不安全的代码就是if语句以及实例的创建操作,所以我们需要对这段代码加锁。 懒汉单例多线程版 加锁后的代码 public class SlackerSingleton {private static SlackerSingleton singleton null;private SlackerSingleton() {}/*** 提供静态方法获取单例** return*/public static SlackerSingleton getSingleton() {//需要使用的时候创建对象synchronized (SlackerSingleton.class) {if (singleton null) {singleton new SlackerSingleton();}}return singleton;} }上述代码仅仅是针对首次创建实例的情况,如果singleton已经创建好了,if语句就啥用了但是第二次进入该方法会去获取锁,而获取锁海外释放锁的是耗时耗力的。所以可以在加锁之前进行判断该实例是否已经创建好了,没有则获取锁,创建好了直接返回。 双重if的代码 public class SlackerSingleton {private static SlackerSingleton singleton null;private SlackerSingleton() {}/*** 提供静态方法获取单例** return*/public static SlackerSingleton getSingleton() {//需要使用的时候创建对象if (singleton null) {//判断是否需要加锁synchronized (SlackerSingleton.class) {if (singleton null) {//判断是否需要创建实例singleton new SlackerSingleton();}}}return singleton;} }优化到这里依旧是存在问题的,和这个锅就是编译器的了。上述代码需要判断isingleton null,这个操作在多线程的情况下是非常频繁的,导致CPU频繁的从内存读取(Load)到寄存器然后进行比较(CMP),此时就会进行优化,线程不会去读取内存中数据,而是会从寄存器中读取数据,一旦当singleton值变化时,线程是感知不到的,就会造成内存可见性问题,除此之外,还有另一个问题就是由new SlackerSingleton();引起来的,创建对象大概可以分为三步:①:JVM为对象分配一块内存S,②:在内存S上对对象进行初始化,③:将内存S的地址赋值singleton变量。为了引出bug,我们假设有两个线程t1和t2同时使用getSingleton()方法。 正常情况按照对象创建①②③来执行。 第一步:线程t1直接运行到singleton new SlackerSingleton();并且一口气执行完了①②③。 第二步:线程t2进行该方法判断singleton就直接返回了。 第三步:线程t2可以正常使用。 出现bug的情况按对象创建的步骤①③②来执行。 第一步:线程t1执行singleton new SlackerSingleton();执行完①JVM为对象分配一块内存.③将内存的地址赋值给singleton 变量 第二步:线程t2进入该方法进行判断发现singleton不为空,拿到singleton 返回了。此时线程t2拿到的是singleton 的半成品对象,因为该对象没有初始化。 第三步:线程t2拿到该对象去使用就可能会出现异常。 综上所述,还存在两个隐含问题一个是内存可见性问题,另一个是指令重排序问题。解决这个问题只需要将静态变量加上volatile 即可。 volatile 修饰静态变量 public class SlackerSingleton {private static volatile SlackerSingleton singleton null;private SlackerSingleton() {}/*** 提供静态方法获取单例** return*/public static SlackerSingleton getSingleton() {//需要使用的时候创建对象if (singleton null) {synchronized (SlackerSingleton.class) {if (singleton null) {singleton new SlackerSingleton();}}}return singleton;} }此时多线程长场景下的懒汉模式完成。 枚举实现单例 因为枚举是天然的单例,并且枚举类型无法通过反射来获取封装的私有变量,非常安全。 示例代码 public enum Singleton {INSTANCE;public void businessMethod() {System.out.println(我是一个单例);} }简单使用 public class SingletonDemo {public static void main(String[] args) {Singleton.INSTANCE.businessMethod();} }运行结果
http://www.hkea.cn/news/14459109/

相关文章:

  • 旅游网站模板htmlwordpress如何使用一个demo
  • 咸阳网站建设价格深圳房地产信息网官方网站
  • 广东建设厅的网站查询余姚网站建设服务
  • wordpress管理员头像成都网站建设优化前十
  • 人才网站建站做公司网站要学会什么
  • 网站一般的后台四川城乡建设网站首页
  • 做网站用什么软件免费房地产网站设计方案
  • 神马网站排名临沂购买模板建站
  • 设计网站数据wordpress速度优化
  • 网站建设费汇算清缴课外辅导东莞网站建设技术支持
  • 南宁自助建站模板下载深圳在哪些网站上面做推广
  • 泉州建设培训中心网站做网站怎么开发客户
  • 上海公司注销seo工资
  • 做网站多少费用更换网站程序
  • 做介绍美食网站的菜单的官方百度
  • 深圳社区网站开发公司网站颜色搭配
  • 广西南宁网站推广做ar的网站
  • 景德镇网站建设景德镇做百度收录比较好的网站
  • 设计一个网站的步骤网页打不开视频
  • 帝国cms怎么做音乐网站福州鼓楼区建设局网站
  • 商务网站建设联系方式编程软件下载手机版
  • 淘宝网站是谁做的好处平面设计很难学吗
  • 建设通和天眼查网站注册推广赚钱一个30元
  • 三艺网站建设自己要注册商标去哪注册
  • 南宁网页制作招聘网seo黑帽是什么
  • 建设公司网站的好处保亭交通工程建设局网站
  • 国外设计网站pinterest极速版免费虚拟主机空间互联
  • 如何查一个网站有没有做外链电子商务网站建设需要多少钱
  • 做非洲国际贸易网站wordpress全站采集
  • 有没有专门做标书的网站装饰装修网站建设方案