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

茂名住房和城乡建设局网站优化二十条措施建议

茂名住房和城乡建设局网站,优化二十条措施建议,开发网站需要什么,页面设计层级一般控制()层文章目录一、单例模式二、单例模式的八种实现方式2.1、饿汉式#xff08;静态常量#xff09;2.2、饿汉式#xff08;静态代码块#xff09;2.3、懒汉式#xff08;线程不安全#xff09;2.4、懒汉式#xff08;线程安全#xff0c;同步方法#xff09;2.5、双重检查2… 文章目录一、单例模式二、单例模式的八种实现方式2.1、饿汉式静态常量2.2、饿汉式静态代码块2.3、懒汉式线程不安全2.4、懒汉式线程安全同步方法2.5、双重检查2.6、静态内部类2.7、枚举一、单例模式 单例模式(Singleton Pattern)确保某一个类只有一个实例而且自行实例化并向整个系统提供这个实例这个类称为单例类它提供全局访问的方法。单例模式是一种对象创建型模式。 单例模式有三个要点 某个类只能有一个实例它必须自行创建这个实例它必须自行向整个系统提供这个实例。 二、单例模式的八种实现方式 2.1、饿汉式静态常量 /*饿汉式静态常量*/ public class Singleton1 {//创建一个私有构造器不让其他类newprivate Singleton1(){}//创建一个静态常量public static final Singleton1 INSTANCE new Singleton1();//实例方法方法是静态是为了通过类名调用public static Singleton1 newInstance(){return INSTANCE;}public static void main(String[] args) {Singleton1 s1 Singleton1.newInstance();Singleton1 s2 Singleton1.newInstance();//比较两个实例是否相等 结果trueSystem.out.println(s1s2);} }优缺点 优点简单类加载的时候就完成了实例化避免了线程安全问题。缺点如果没用到这个实例也会实例化浪费了内存。 2.2、饿汉式静态代码块 /*饿汉式静态代码块*/ public class Singleton2 {//创建一个私有构造器不让其他类newprivate Singleton2(){}//定义一个静态实例public static Singleton2 instance;//静态代码块中实例化对象static {instance new Singleton2();}//提供一个公有静态方法放回实例化对象public static Singleton2 newInstance(){return instance;}public static void main(String[] args) {Singleton2 s1 Singleton2.newInstance();Singleton2 s2 Singleton2.newInstance();//比较两个实例是否相等 结果trueSystem.out.println(s1s2);} }优缺点跟上面的静态常量一样 2.3、懒汉式线程不安全 /** 懒汉式* 实例是在使用的时候创建但线程不安全,会创建多个对象* */ public class Singleton3 {//定义instance静态变量private static Singleton3 instance;private Singleton3(){}//初始化方法实现懒加载需要时才创建对象public static Singleton3 newInstance() throws InterruptedException {//没有实例则创建对象if (instance null){//让线程睡一下创造多线程进入条件Thread.sleep(20);instance new Singleton3();}//实例化过直接返回return instance;}public static void main(String[] args) {for (int i 0; i 100; i) {//创建多线程实现Runnable接口重写run方法new Thread(new Runnable() {Overridepublic void run() {try {//通过哈希码看对象是否一样System.out.println(Singleton3.newInstance().hashCode());} catch (InterruptedException e) {e.printStackTrace();}}}).start();}} }优缺点 优点起到了懒加载效果需要时才创建对象但只适合在单线程下使用。缺点在多线程情况下一个线程 进入了if (instance null)判断语句块还未来得及往下执行另一个线程又进来了这时就产生了多个实例造成线程不安全。 2.4、懒汉式线程安全同步方法 /** 懒汉式线程安全加入同步方法* */ public class Singleton4 {//定义instance静态变量private static Singleton4 instance;private Singleton4(){}//加入同步方法保证只有一个线程进入public static synchronized Singleton4 newInstance() throws InterruptedException {//没有实例则创建对象if (instance null){//让线程睡一下创造多线程进入条件Thread.sleep(20);instance new Singleton4();}//实例化过直接返回return instance;}public static void main(String[] args) {for (int i 0; i 100; i) {//创建多线程实现Runnable接口重写run方法new Thread(new Runnable() {Overridepublic void run() {try {//通过哈希码看对象是否一样System.out.println(Singleton4.newInstance().hashCode());} catch (InterruptedException e) {e.printStackTrace();}}}).start();}} }方式一是一个实例同时锁住了空判断和创建实例线程安全。但是这就相当于全部锁住了就跟同步方法的效果一样线程安全但效率很低 方式二不是一个实例线程不安全原因是一个线程进入了空判断还没往下执行另一个线程来了其中一个线程拿到锁往下执行创建了实例执行完释放锁后另一个线程也往下执行了并创建对象两者创建的对象并不一致。 2.5、双重检查 public class Singleton6 {private static Singleton6 instance;private Singleton6(){};public static Singleton6 newInstance() throws InterruptedException {//双重检查,是单例if (instance null){//首先判断实例是否为空空就上锁synchronized (Singleton6.class){//上锁后如果上面new出了个对象此时在这判断是否为空不为空就直接返回了确保了只有一个实例if (instance null){Thread.sleep(20);instance new Singleton6();}}}return instance;}public static void main(String[] args) {for (int i 0; i 100; i) {new Thread(() - {try {System.out.println(Singleton6.newInstance().hashCode());} catch (InterruptedException e) {e.printStackTrace();}}).start();}} }双重检查实际上就是在懒汉式同步代码块的内部再添加了一个判断这样就保证线程安全 2.6、静态内部类 public class Singleton7 {private Singleton7() {}//静态内部类里实例化对象,在Singleton7加载的时候SingletonInstance内部类不加载只在实例的时候加载private static class SingletonInstance{//静态属性,实例化对象private static final Singleton7 INSTANCE new Singleton7();}//提供一个静态的公有方法,返回SingletonInstance类的实例public static Singleton7 newInstance(){return SingletonInstance.INSTANCE;}public static void main(String[] args) {for (int i 0; i 100; i) {new Thread(()-{System.out.println(Singleton7.newInstance().hashCode());}).start();}} }这种方式采用了类加载的机制来保证初始化实例时只有一个线程线程安全。静态内部类在 Singleton7 类被加载时并不会立即实例化而是在调用 newInstance方法的时候才会实例化静态内部类通过SingletonInstance类调用实例从而完成 Singleton 的实例化。类的静态属性只会在第一次加载类的时候初始化JVM 帮助我们保证了线程的安全性在类进行初始化时别的线程是无法进入的。 2.7、枚举 package com.s.singleton; /*** 枚举*/ public enum Singleton8 {INSTANCE;public static void main(String[] args) {for (int i 0; i 100 ; i) {new Thread(()-System.out.println(Singleton8.INSTANCE.hashCode())).start();}} }枚举实现是单例的线程安全不仅可以解决线程同步还可以防止反序列化。《Effective Java》作者 Josh Bloch 提倡的方式。
http://www.hkea.cn/news/14412437/

相关文章:

  • 公司里面php开发一个网站的流程怎么做卖保险的网站
  • 网站开发公司 商业计划书网站源码提取
  • 平台网站建设设计天元建设集团有限公司现状
  • 那家网站建设好做古风头像的网站
  • 嘉兴网站公司冒用他人公司做网站
  • 企业网站的建立之前必须首先确定金山网站建设费用
  • 淘宝网站建设的目标是什么冒用公司名做网站
  • 平安建设宣传音频免费下载网站哪个公司制作网站好
  • 官方网站如何建立做旅游网站毕业设计
  • 网站域名收费宁波建站公司哪家服务好
  • o2o手机网站建设技术wordpress免邮箱注册
  • 电子商务网站建设技术规范信息流优化师需要具备哪些能力
  • 炫酷的网站开发遨游网站建设有限公司
  • 网站设计的指导思想深圳做专业网站
  • 网站浏览图片怎么做淘宝做任务网站
  • 网站制作过程中常见的问题网站百度突然不收录了
  • 深圳社区网站开发公司网站子目录设计
  • 网站营销特点网站备案过户 主体需要一致么
  • 国外网站ip地址人才市场招聘信息
  • c 可以做哪些网站电子商务平台建设与运营技术
  • 北京个人制作网站有哪些网站建设初步认识的实训体会
  • 网站服务器维护技术公众平台网站建设哪家专业
  • 湛江网站建设开发烟台手机网站建设电话
  • 公司网站打开显示建设中西安百度推广开户
  • 2017网站建设报价单房产信息网网址
  • 门户网站建设服务收费深圳市房地产信息平台官网
  • 自己学习建设网站响应式网站用什么工具
  • 阳泉建设公司网站小程序定制开发深圳
  • 如何建设 linux 网站建设旅游门户网站
  • js网站开发视频教程wordpress文章点赞