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

网站建设的目的分析网络营销专业技能

网站建设的目的分析,网络营销专业技能,网站开发jd,b2b电子商务平台运营案例一.单例模式 单例模式是一种设计模式;类似于棋谱,有固定套路,针对一些特定场景可以给出一些比较好的解决方案; 只要按照设计模式来写代码,就可以保证代码不会太差,保证了代码的下限; --------------------------------------------------------------------------------…

案例一.单例模式

单例模式是一种设计模式;类似于棋谱,有固定套路,针对一些特定场景可以给出一些比较好的解决方案;

只要按照设计模式来写代码,就可以保证代码不会太差,保证了代码的下限;

-------------------------------------------------------------------------------------------------------------------------------

补充:

设计模式是针对编写代码过程中的软性约束: 不是强制的,可以遵守也可以不遵守;

框架是针对编写代码过程中的硬性约束: 针对一些特定的问题场景,大佬们把基本的代码和大部分逻辑已经写好了,留下一些空位,让你在空位上自定义一些逻辑;

虽然也是别人写好的,但是代码的主体还是由你来完成,你可以决定调用或者不调用;

-------------------------------------------------------------------------------------------------------------------------------

开发过程中,希望有的类在一个进程中不应该存在多个实例(对象),此时就可以使用单例模式,限制某个类只有一个实例;

饿汉模式

饿的意思是"迫切": 在类被加载的时候就会创建出单例的实例;

class Singleton {private static Singleton instance = new Singleton();//static修饰将instance变成类成员;//类成员的初始化就是在Singleton这个类被加载的时候;public static Singleton getInstance() {return instance;}
}public class demo20 {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);}
}
//true

只要不再其他代码中,new这个类,每次需要使用时都通过getInstance()来获取实例,那么此时这个类就是单例的了;

主要要解决的问题:防止别人new这个类的对象

单例模式的核心:将构造方法设为私有的

意味着在类的外面,就无法再构造新的实例了;

private Singleton() {}

通过反射/序列化反序列化等非常规手段还是可以打破单例模式的;

懒汉模式

计算机的"懒"是褒义词: 意思是效率会更高;

推迟了创建实例的时机,第一次使用的时候,才会创建实例;

class SingletonLazy {private static SingletonLazy instance = null;public static SingletonLazy getInstance() {if(instance == null) {instance = new SingletonLazy();}return instance;}private SingletonLazy() {}
}public class demo21 {public static void main(String[] args) {SingletonLazy s1 = SingletonLazy.getInstance();SingletonLazy s2 = SingletonLazy.getInstance();System.out.println(s1 == s2);}
}
//true

思考:如果在多线程环境下,调用getInstance,是否会有问题呢?

饿汉模式没有线程安全问题,但是懒汉模式存在线程安全问题;

原因:多个线程针对一个变量修改可能会产生线程安全问题,但是如果只是读取,则没有问题;

而饿汉模式中的getInstance方法中只有读操作,而懒汉模式中的getInstance方法则有判断和修改赋值操作,故会出现线程安全问题;

解决办法:加锁!

private static Object locker = new Object();public static SingletonLazy getInstance() {synchronized (locker) {if (instance == null) {instance = new SingletonLazy();}}return instance;}

当前代码的写法,只要调用getInstance,都会触发加锁操作,虽然没有线程安全问题了,但是Instance new出来了之后就都是读操作,此时也会因为加锁,产生阻塞,影响性能;

优化:

public static SingletonLazy getInstance() {if(instance == null) {synchronized (locker) {if (instance == null) {instance = new SingletonLazy();}}}return instance;}

-------------------------------------------------------------------------------------------------------------------------------

补充:

如果是一个局部变量,每个线程的局部变量都有自己的一份.但是如果是new出来的对象,可以共享;

少数局部变量在线程中不能共用是java自身的限制,在C++,系统原生api中则没有这样的限制;

创建出的局部变量,处于JVM内存的"栈"区域中;

new出来的变量,处于JVM内存的"堆'区域中;

整个JVM进程中,只有一份,是线程之间大家共用的;而则是每个线程有自己独立的栈;

正因为变量的共享是常态,所以就容易触发多个线程修改同一个变量导致线程安全问题;

-------------------------------------------------------------------------------------------------------------------------------

instance = new SingletonLazy();可以分为三个步骤

1.分配内存空间;(买房)

2.执行构造方法;(装修)

3.内存空间的地址,赋值给引用变量;(收房拿到钥匙)

编译器可能按照123的顺序也可能按照132的顺序来执行;对于单线程来说是没有区别的;

在多线程中按照132的顺序执行可能会出现问题:

若按照此顺序,线程A执行到步骤3时(此时instance的地址就不为null了),线程B进行了第一个if语句的判断并返回了instance,注意此时的instance指向了一个没有初始化的空的内存,故可能会产生线程安全问题;

解决方法:给instance加上volatile关键字;

http://www.hkea.cn/news/701617/

相关文章:

  • 浙江建设职业技术学院迎新网站做一个网站要多少钱
  • axure做网站好不好手机百度问一问
  • 开发微信小程序的流程广州seo优化电话
  • 小企业网站建设和管理全能搜
  • 无棣县建设局网站游戏优化大师下载安装
  • 小额贷款 网站模板品牌推广软文
  • 网站建设开发成本天津百度搜索网站排名
  • 做的好的营销型网站有哪些内容外贸网站外链平台
  • 东营网站建设预算价格百度网盘网页版入口官网
  • 网站建设中标公告18款禁用看奶app入口
  • 网站运营人员岗位职责长沙正规seo优化价格
  • cnzz统计代码放在后台网站为什么没显示seo的英文全称是什么
  • 杭州企业网站建设方案广告门
  • 自己免费做网站(二)seo优化公司信
  • 广州外贸b2b网站建设刷钻业务推广网站
  • 做企业网站用什么怎样宣传自己的品牌
  • 濮阳做网站的公司我的百度账号
  • 美食网站开发如何做好网络营销工作
  • 网站建设案例资料今天的新闻内容
  • 台州专业网站建设方案seo软文代写
  • 个人网站 百度推广全球搜索大全
  • 网站消息推送5118素材网站
  • 天津 响应式网站设计企业网站模板免费
  • 网站用花生壳nas做存储百度seo发包工具
  • wordpress cache深圳纯手工seo
  • 怎样找到正规代加工网站百度地图3d实景地图
  • 潍坊网站建设公司网站搭建免费
  • 惠州做网站好的公司下载百度语音导航地图安装
  • 春节网站怎么做小说排行榜百度搜索风云榜
  • 商城服务是什么软件seo是指什么岗位